MFC CDialog не отображается
Вот моя проблема: в моем решении у меня есть 2 проекта, один из которых - библиотека, в которой я создал файл ресурсов (mylib.rc) и шаблон диалога в нем. Затем я создал класс, который наследует CDialog и использует этот шаблон. Но когда я создаю его экземпляр и вызываю DoModal(), ничего не добавляется...
здесь код моего класса, что-то не так с этим?
MyDialog.h
/*MyDialog.h*/
#pragma once
#include "../../../resource.h"
class MyDialog : public CDialog
{
enum {IDD=IDD_DLGTEMPLATE};
public:
MyDialog(CWnd* pParent = NULL);
virtual ~MyDialog();
protected:
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
private:
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedCancel();
};
MyDialog.cpp
/*MyDialog.cpp*/
#include "stdafx.h"
#include "MyDialog.h"
MyDialog::MyDialog(CWnd* pParent /*=NULL*/) : CDialog(IDD_DLGTEMPLATE, pParent) {}
MyDialog::~MyDialog() {}
BOOL MyDialog::OnInitDialog() { return TRUE; }
BEGIN_MESSAGE_MAP(MyDialog, CDialog)
ON_BN_CLICKED(IDOK, &MyDialog::OnBnClickedOk)
ON_BN_CLICKED(IDCANCEL, &MyDialog::OnBnClickedCancel)
END_MESSAGE_MAP()
void MyDialog::OnBnClickedOk() { OnOK(); }
void MyDialog::OnBnClickedCancel() { OnCancel(); }
3 ответа
Вы статически связываетесь с библиотекой?
Если да, то одной из причин может быть то, что вы используете расширенный контроль редактирования, но не инициализируете RICHED20.DLL или RICHEDIT.DLL.3. Вы должны вызвать AfxInitRichEdit2 или AfxInitRichEdit. Если ресурс вашего диалога находится в DLL, вы должны установить дескриптор ресурса для дескриптора модуля DLL перед вызовом диалога.
Вызовите AfxGetResourceHandle, чтобы сохранить текущий дескриптор, и вызовите AfxSetResourceHandle, чтобы установить дескриптор в DLL.
После того, как вы открыли диалоговое окно, используйте AfxSetResourceHandle, чтобы установить дескриптор, используя сохраненный.
Попробуйте разместить следующее непосредственно перед звонком DoModal()
:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
Я наконец-то нашел его, я использовал второй файл ресурсов (*.rc), мне просто нужно было включить второй файл в первый через диалоговое окно "Установить включения" в "Представлении ресурсов" в качестве "Директивы времени компиляции"
В любом случае, спасибо, ребята!