2013-02-19 4 views
0

Я создал диалоговое окно внутри библиотеки Win32 (с использованием редактора ресурсов) и теперь хочу показать его как прикладную программу (используя эту DLL), вызывает DisplayDialog, но он не работает.Создание и загрузка DialogBox из DLL

// 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 
} 
... 

Я проверил, что эта DLL отображает диалог, если диалог принадлежит AppProgram. Здесь я хочу отобразить диалог, когда он является частью библиотеки DLL.

Просьба предложить нам создать диалог внутри DLL или передать его из программы. + как показать диалог в данном сценарии. Заранее спасибо.

ответ

0

Что-то вроде этого:

HMODULE module = LoadLibrary("MyDll.dll"); 
HRSRC res = FindResource(module, "#1234", RT_DIALOG); 
DLGTEMPLATE* pTemplate = (DLGTEMPLATE*)LoadResource(module, res); 
DialogBoxIndirect(0, pTemplate, hwnd, dlgproc); 
+0

GetDlgItem (hWnd, IDC_EDIT_FNAME) хорошо работает в WM_INITDIALOG, но возвращает 0x00000000 в WM_COMMAND, пожалуйста, скажите мне, почему его «неправильно работает внутри WM_COMMAND. – null

+0

@ajay - это другой вопрос. –

1

Параметр hInst является дескриптор модуля, содержащего ресурс диалогового окна. Если вы хотите получить диалог из ресурсов DLL, то передайте дескриптор DLL, а не дескриптор в основное приложение.

Смежные вопросы