Let me know if you spot or have any problems. Works for me.
Cheers, Jon
Code: Select all
Procedure WindowCallback(Window, Message, wParam, lParam) 
  Select Message 
    Case #WM_CLOSE 
      If MessageBox_(Window, "Exit Program?", "Exit", #MB_YESNO) = #IDYES 
        DestroyWindow_(Window) 
      Else 
        Result  = 0 
      EndIf 
    Case #WM_DESTROY 
      PostQuitMessage_(0) 
      Result  = 0 
    Default 
      Result  = DefWindowProc_(Window, Message, wParam, lParam) 
  EndSelect 
  ProcedureReturn Result 
EndProcedure 
Procedure ChildWindowCallback(Window, Message, wParam, lParam) 
  Select Message 
    Case #WM_CLOSE 
      If MessageBox_(Window, "Exit Program?", "EXIT", #MB_YESNO) = #IDYES 
        DestroyWindow_(Window) 
      Else 
        Result  = 0 
      EndIf 
    Case #WM_DESTROY 
      PostQuitMessage_(0) 
      Result  = 0 
    Default 
      Result  = DefWindowProc_(Window, Message, wParam, lParam) 
  EndSelect 
  ProcedureReturn Result 
EndProcedure 
Procedure DialogCallBack(Window, Message, wParam, lParam)
  
  Select Message
    Case #WM_INITDIALOG
      result = #True
  
    Case #WM_COMMAND
      If wParam = #IDOK Or wParam = #IDCANCEL
        result = #True
        EndDialog_(Window, wParam)
      EndIf
  
    Default
      result = #False
  EndSelect
  
  ProcedureReturn result
  
EndProcedure
hlibMain = LoadLibrary_("clipbrd.exe")
hmenuMain = LoadMenu_(hlibMain, "#8")
hicnMain = LoadIcon_(hlibMain, "#2")
#Style  = #WS_VISIBLE | #WS_CLIPCHILDREN | #WS_SIZEBOX| #WS_OVERLAPPEDWINDOW 
#StyleEx  = #WS_EX_OVERLAPPEDWINDOW | #WS_EX_WINDOWEDGE
WindowClass.s  = "Test Parent" 
wc.WNDCLASSEX 
wc\cbSize  = SizeOf(WNDCLASSEX) 
wc\hIcon = hicnMain
wc\lpfnWndProc  = @WindowCallback() 
wc\hCursor  = LoadCursor_(0, #IDC_CROSS)
wc\hbrBackground  = #COLOR_WINDOW + 1 
wc\lpszClassName  = @WindowClass.s 
If RegisterClassEx_(@wc) 
  hwndMain  = CreateWindowEx_(#StyleEx, WindowClass.s, "Test Parent Window", #Style, 10, 10, 600, 600, 0, 0, GetModuleHandle_(0), 0) 
  ShowWindow_(hwndMain,  #SW_SHOWDEFAULT) 
  UpdateWindow_(hwndMain); 
  SetMenu_(hwndMain, hmenuMain)
EndIf 
#StyleChild  =  #WS_CLIPSIBLINGS | #WS_CHILD  | #WS_SYSMENU | #WS_CLIPCHILDREN | #WS_CAPTION;| #WS_BORDER
#StyleExChild  = #WS_EX_OVERLAPPEDWINDOW ;| #WS_EX_STATICEDGE
WindowClassChild.s  = "Test child" 
wcc.WNDCLASSEX 
wcc\cbSize  = SizeOf(WNDCLASSEX)
wcc\hIcon = hicnMain
wcc\lpfnWndProc  = @ChildWindowCallback() 
wcc\hCursor  = LoadCursor_(0, #IDC_HAND)
wcc\hbrBackground  = #COLOR_WINDOW + 1
wcc\lpszClassName  = @WindowClassChild.s
If RegisterClassEx_(@wcc) 
  hwndChild = CreateWindowEx_(#StyleExChild, WindowClassChild.s , "Test Child Window" , #StyleChild, 0, 0, 320, 240, hwndMain , 0, 0, 0) 
  ShowWindow_(hwndChild,  #SW_SHOWDEFAULT) 
  UpdateWindow_(hwndChild);
  
EndIf
hndDialog = DialogBoxParam_(hlibMain, "#100", hwndMain, @DialogCallback(), 0)
ShowWindow_(hndDialog, #SW_SHOW)
While GetMessage_(msg.MSG, #Null, 0, 0 ) 
  TranslateMessage_(msg) 
  DispatchMessage_(msg) 
Wend