我在Win32 DLL中创建了一个对话框(使用资源编辑器),现在想要将其显示为应用程序(使用此DLL)调用DisplayDialog,但它无效。
// 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
}
...
如果对话框属于AppProgram,我已经测试过此DLL显示对话框。 在这里,我想在它是DLL的一部分时显示对话框。
请建议我们是否应该在DLL中创建对话框或者应该从程序中传递它。 +如何在给定方案中显示对话框。提前谢谢。
答案 0 :(得分:1)
hInst
参数是包含对话框资源的模块的句柄。如果要从DL的resourcesL获取对话框,则将句柄传递给DLL而不是主应用程序的句柄。
答案 1 :(得分:0)
这样的事情:
HMODULE module = LoadLibrary("MyDll.dll");
HRSRC res = FindResource(module, "#1234", RT_DIALOG);
DLGTEMPLATE* pTemplate = (DLGTEMPLATE*)LoadResource(module, res);
DialogBoxIndirect(0, pTemplate, hwnd, dlgproc);