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 のリソースからダイアログを取得する場合は、ハンドルをメイン アプリケーションではなく 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 に答える