2013-02-19 59 views
0

我在Win32 DLL(使用資源編輯器)內創建了一個對話框,現在想要顯示它作爲應用程序(使用此DLL)調用DisplayDialog,但它不起作用。從DLL創建並加載DialogBox

// AppProgram.cpp 
... 
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg) { 
    case WM_COMMAND: 
     switch (LOWORD (wParam)) { 
      case IDM_FILE_NEW_DIALOG: 
       DisplayDialog (hInst, hWnd); 
       break; 
      ... 
     } 
     break; 
     .... 
    } 
return DefWindowProc(hWnd, msg, wParam, lParam); 
} 

我的DLL看起來像

#include "stdafx.h" 
#include "myDLL.h" 

EXPORT BOOL CALLBACK DisplayDialog (HINSTANCE hInst, HWND hWnd) { 
    DialogBox (hInst, MAKEINTRESOURCE (IDD_DIALOG1), hWnd, reinterpret_cast<DLGPROC> (DiagProc)); 
    // MessageBox works here 
} 
... 

我測試過,這個DLL,如果顯示的對話框屬於AppProgram對話框。 這裏,我想在它是DLL的一部分時顯示對話框。

請建議我們是應該在DLL中創建對話框還是應該從程序傳遞它。 +如何在給定場景中顯示對話框。提前致謝。

回答

0

事情是這樣的:

HMODULE module = LoadLibrary("MyDll.dll"); 
HRSRC res = FindResource(module, "#1234", RT_DIALOG); 
DLGTEMPLATE* pTemplate = (DLGTEMPLATE*)LoadResource(module, res); 
DialogBoxIndirect(0, pTemplate, hwnd, dlgproc); 
+0

GetDlgItem(hWnd,IDC_EDIT_FNAME)在WM_INITDIALOG中正常工作,但在WM_COMMAND中返回0x00000000,請告訴我爲什麼它在WM_COMMAND中不能正常工作。 – null 2013-02-20 05:59:57

+0

@ajay - 這是另一個問題。 – 2013-02-20 09:31:47

1

hInst參數是句柄包含對話框資源的模塊。如果你想從DL的resourcesL獲得對話框,那麼把句柄傳給DLL而不是主應用程序的句柄。