Page 1 of 1

Load resources from dll or exe with API - example

Posted: Sun Jan 29, 2006 2:18 am
by jonljacobi
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 8)

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