Code: |
' WORK IN PROGRESS - DO NOT REPOST
Open "WMLiberty" For DLL As #wmlib StyleBits #wnd, 0, _WS_VISIBLE, 0, 0 Menu #wnd, _ "&File", _ "&Open...", wnd.mnuFileOpen, _ |, _ "E&xit", wnd.mnuFileExit Open "Hidden Menu Processor" For Window As #wnd hWnd = HWnd(#wnd) CallDLL #user32, "GetMenu", _ hWnd As ULong, _ hMenu As ULong WindowWidth = 320 WindowHeight = 75 StyleBits #dlg, _DS_CENTER, 0, 0, 0 StaticText #dlg.stcFile, "Selected file:", 6, 4, 100, 16 TextBox #dlg.txtFile, 6, 20, 300, 20 Open "Dialog with a Menu" For Dialog As #dlg #dlg "TrapClose Quit" hDlg = HWnd(#dlg) Call GetClientSize hDlg, 0, cyInit CallDLL #user32, "SetMenu", _ hDlg As ULong, _ hMenu As ULong, _ ret As Long Call GetClientSize hDlg, 0, cyNew cyMenu = cyInit - cyNew Call GetWindowSize hDlg, cxDlg, cyDlg Call SetWindowPos hDlg, 0, 0, 0, cxDlg, cyDlg + cyMenu, _ _SWP_NOZORDER Or _SWP_NOMOVE Callback lpfn, _ dlg.OnCommand( ULong, ULong, ULong, ULong ), Long CallDLL #wmlib, "SetWMHandler", _ hDlg As ULong, _ _WM_COMMAND As Long, _ lpfn As ULong, _ 1 As Long, _ ret As Long Call DoEvents Sub DoEvents [DoEvents] Scan CallDLL #kernel32, "Sleep", 50 As Long, r As Void GoTo [DoEvents] End Sub Sub wnd.mnuFileOpen FileDialog "", "*.*", file$ If file$ = "" Then Exit Sub #dlg.txtFile file$ #dlg.txtFile "!SetFocus" ret = SendMessageLong(HWnd(#dlg.txtFile), _EM_SETSEL, 0, -1) End Sub Sub wnd.mnuFileExit Call Quit "#dlg" End Sub Sub Quit h$ Close #dlg Close #wnd Close #wmlib End End Sub Function dlg.OnCommand( hDlg, uMsg, wParam, lParam ) If wParam <= 65535 then ret = SendMessageLong(HWnd(#wnd), uMsg, wParam, lParam ) dlg.OnCommand = 1 End If End Function Function SendMessageLong( hWnd, uMsg, wParam, lParam ) CallDLL #user32, "SendMessageA", _ hWnd As ULong, _ uMsg As ULong, _ wParam As ULong, _ lParam As ULong, _ SendMessageLong As Long End Function Sub GetClientSize hWnd, ByRef retWidth, ByRef retHeight Struct ClientRect, _ left As Long, _ top As Long, _ right As Long, _ bottom As Long CallDLL #user32, "GetClientRect", _ hWnd As ULong, _ ClientRect As Struct, _ ret As Long retWidth = ClientRect.right.struct retHeight = ClientRect.bottom.struct End Sub Sub GetWindowSize hWnd, ByRef retWidth, ByRef retHeight Struct WindowRect, _ left As Long, _ top As Long, _ right As Long, _ bottom As Long CallDLL #user32, "GetWindowRect", _ hWnd As ULong, _ WindowRect As Struct, _ ret As Long retWidth = WindowRect.right.struct - WindowRect.left.struct + 1 retHeight = WindowRect.bottom.struct - WindowRect.top.struct + 1 End Sub Sub SetWindowPos hWnd, hWndAfter, X, Y, Width, Height, Flags CallDLL #user32, "SetWindowPos", _ hWnd As ULong, _ hWndAfter As ULong, _ X As Long, _ Y As Long, _ Width As Long, _ Height As Long, _ Flags As ULong, _ ret As Long End Sub |
Subject: [DEMO BETA] Dialog with a menu
Subject: Re: [DEMO BETA] Dialog with a menu
Works for me. WinXP with SP2, LB v4.03, WMLiberty v1.03
Subject: Re: [DEMO BETA] Dialog with a menu
Thanks a lot, Bill!
I'll get this filled out and formalized in a few days.
I'll get this filled out and formalized in a few days.
Page 1 of 1
You cannot post new topics in this forumYou cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum