[英]Creating and Loading DialogBox from DLL
我已经在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中创建对话框还是从程序中传递它。 +如何在给定场景下显示对话框。 提前致谢。
hInst
参数是包含对话框资源的模块的句柄。 如果要从DL的resourcesL中获取对话框,则将句柄传递给DLL,而不是传递给主应用程序。
像这样:
HMODULE module = LoadLibrary("MyDll.dll");
HRSRC res = FindResource(module, "#1234", RT_DIALOG);
DLGTEMPLATE* pTemplate = (DLGTEMPLATE*)LoadResource(module, res);
DialogBoxIndirect(0, pTemplate, hwnd, dlgproc);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.