Code: Select all
EnableExplicit
Procedure EmulateDialogCallback(hWnd, uMsg, wParam, lParam)
Protected oldproc = GetProp_(hWnd, "oldproc")
Select uMsg
Case #WM_NCDESTROY
RemoveProp_(hWnd, "oldproc")
Case #WM_KEYDOWN
Select GadgetType(GetDlgCtrlID_(hWnd))
Case #PB_GadgetType_Button, #PB_GadgetType_ButtonImage
If wParam = #VK_RETURN
SendMessage_(hWnd, #BM_CLICK , 0, 0)
ProcedureReturn 0
EndIf
Case #PB_GadgetType_String
If wParam = #VK_RETURN
SetFocus_(GetNextDlgTabItem_(GetParent_(hWnd), hWnd, #False))
ProcedureReturn 0
EndIf
Case #PB_GadgetType_Option
If wParam = #VK_DOWN
SendMessage_(GetNextDlgGroupItem_(GetParent_(hWnd), hWnd, #False), #BM_CLICK , 0, 0)
ProcedureReturn 0
ElseIf wparam = #VK_UP
SendMessage_(GetNextDlgGroupItem_(GetParent_(hWnd), hWnd, #True), #BM_CLICK , 0, 0)
ProcedureReturn 0
EndIf
EndSelect
EndSelect
ProcedureReturn CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
EndProcedure
Procedure EmulateDialog(ID)
Protected oldproc = SetWindowLongPtr_(GadgetID(ID), #GWL_WNDPROC, @EmulateDialogCallback())
ProcedureReturn SetProp_(GadgetID(ID), "oldproc", oldproc)
EndProcedure
Procedure InitEmulateWin(ID)
ProcedureReturn SendMessage_(WindowID(ID), #WM_CHANGEUISTATE, 2 | (1 << 16), 0)
EndProcedure
; Example
Define i
OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(0, 10, 10, 200, 20, "Default Button")
StringGadget(1, 10, 40, 200, 20, "")
StringGadget(2, 10, 70, 200, 20, "")
OptionGadget(3, 10, 100, 60, 20, "Option 1")
OptionGadget(4, 10, 130, 60, 20, "Option 2")
OptionGadget(5, 10, 160, 60, 20, "Option 3")
SetGadgetState(3, 1)
SetActiveGadget(0)
For i = 0 To 5
EmulateDialog(i)
Next
InitEmulateWin(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow : Break
Case #PB_Event_Gadget
Debug "Gadget: " + Str(EventGadget()) + " : Type: " + Str(EventType())
EndSelect
ForEver