MFC CDialog没有显示

时间:2012-06-28 15:03:43

标签: c++ visual-studio winapi mfc cdialog

这是我的问题: 在我的解决方案中,我有2个项目,一个是lib,我在其中创建了一个ressource文件(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 个答案:

答案 0 :(得分:2)

您是否静态链接图书馆?

如果是,其中一个原因可能是您正在使用丰富的编辑控件,但您没有初始化RICHED20.DLL或RICHEDIT.DLL.3您必须调用AfxInitRichEdit2或AfxInitRichEdit。 如果对话框的资源在DLL中,则必须在调用对话框之前将资源句柄设置为DLL模块的handlle。

调用AfxGetResourceHandle来存储当前句柄并调用AfxSetResourceHandle来设置DLL的句柄。

使用对话框后,使用AfxSetResourceHandle使用保存的句柄设置句柄。

答案 1 :(得分:0)

尝试在调用DoModal()之前放置以下内容:

AFX_MANAGE_STATE(AfxGetStaticModuleState());

答案 2 :(得分:0)

我终于找到了它,我正在使用第二个ressource文件(* .rc),我只需要将第二个包含在第一个通过“Ressource View”中的“Set Includes”对话框作为“编译 - 时间指令“

无论如何,谢谢你!