Load resources from dll or exe with API - example
Posted: Sun Jan 29, 2006 2:18 am
				
				This opens clipbrd.exe and loads an icon, menu, and dialog box then puts them on screen.
Let me know if you spot or have any problems. Works for me.
Cheers, Jon
 
			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