繁体   English   中英

从DLL创建和加载对话框

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM