Wilson WindowWare Tech Support

WinBatch WinBatch+Compiler WebBatch
Home | Tech Database | Tech BBS | White Papers | Purchase


Dialogs - Menus in dialogs.wbt

Keywords: 	  Dialogs - Menus in dialogs.wbt

Magic. Real Magic. Don't ask. Thanx to Guido for making it work.

The PopupMenu UDF takes a | delimited list of menu items and presents them to the user.


#DefineFunction PopupMenu(choices)
   user32=StrCat(DirWindows(1),"User32.DLL")
   MF_STRING = 0
   TPM_RETURNCMD = 256
   TPM_LEFTBUTTON = 0
   hwnd=dllhwnd("")
   ;create menu
   hmenu = DLLCall(user32,long:"CreatePopupMenu")
   choicecount=ItemCount(choices,"|")
   for xx=1 to choicecount
      thischoice=ItemExtract(xx,choices,"|")
      DLLCall(user32,long:"AppendMenuA",long:hmenu, long:MF_STRING, long:xx, lpstr:thischoice)
   next
   mc = MouseInfo(3)
   mcx=ItemExtract(1,mc," ")
   mcy=ItemExtract(2,mc," ")
   wFlags=TPM_RETURNCMD|TPM_LEFTBUTTON
   s=DLLCall(user32,long:"TrackPopupMenu",long:hmenu, long:wFlags, long:mcx, long:mcy, long:0, long:hwnd, lpnull)
   ;Destroy Menu
   DLLCall(user32,long:"DestroyMenu",long:hmenu)
   return(s)
#EndFunction


#DefineFunction MyDialogProc(D_Handle,D_Message,D_ControlID,Reserved_0,Reserved_1)
   MSG_INIT=0                ; The one-time initilization
   MSG_BUTTONPUSHED=2        ; Pushbutton or Picturebutton
   
   switch D_Message

      case MSG_INIT
         DialogProcOptions(D_Handle,MSG_BUTTONPUSHED,@TRUE)
         break

      case MSG_BUTTONPUSHED
         switch D_ControlID
             case 002
                pick=PopupMenu("Notepad|Calc")
                switch pick
                   case 1 ; notepad
                      run("notepad.exe","")
                      break
                   case 2 ; calc
                       run("calc.exe","")
                       break
                endswitch
                return (-2)
         endswitch
         break
   endswitch
   return (-1)
#EndFunction



MyDialogFormat=`WWWDLGED,6.1`

MyDialogCaption=`Menu Example`
MyDialogX=002
MyDialogY=030
MyDialogWidth=112
MyDialogHeight=078
MyDialogNumControls=004
MyDialogProcedure=`MyDialogProc`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,DEFAULT`

MyDialog001=`001,001,108,011,STATICTEXT,DEFAULT,DEFAULT,DEFAULT,1,DEFAULT,DEFAULT,DEFAULT,"0|255|255"`
MyDialog002=`001,001,022,011,PUSHBUTTON,DEFAULT,"Run",2,2,DEFAULT,"Microsoft Sans Serif|5325|70|34","0|0|0","0|255|255"`
MyDialog003=`025,001,022,011,PUSHBUTTON,DEFAULT,"Exit",0,3,DEFAULT,"Microsoft Sans Serif|5325|70|34","0|0|0","0|255|255"`
MyDialog004=`026,033,034,011,PUSHBUTTON,DEFAULT,"OK",1,4,DEFAULT,DEFAULT,DEFAULT,DEFAULT`

ButtonPushed=Dialog("MyDialog")