0

我在 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 中创建对话框还是应该从程序中传递它。+ 如何在给定场景中显示对话框。提前致谢。

4

2 回答 2

1

hInst参数是包含对话资源的模块的句柄。如果您想从 DL 的资源 L 中获取对话框,则将句柄传递给 DLL,而不是将句柄传递给主应用程序。

于 2013-02-19T13:16:07.727 回答
0

像这样的东西:

HMODULE module  = LoadLibrary("MyDll.dll");
HRSRC res = FindResource(module, "#1234", RT_DIALOG);
DLGTEMPLATE* pTemplate = (DLGTEMPLATE*)LoadResource(module, res);
DialogBoxIndirect(0, pTemplate, hwnd, dlgproc);
于 2013-02-19T11:33:05.817 回答