首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未显示MFC CDialog

未显示MFC CDialog
EN

Stack Overflow用户
提问于 2012-06-28 23:03:43
回答 3查看 2.5K关注 0票数 1

这是我的问题:在我的解决方案中,我有两个项目,一个是库,我在其中创建了一个资源源文件(mylib.rc)和一个对话框模板。然后,我创建了一个继承CDialog并使用此模板的类。但是当我实例化它并调用DoModal()时,没有附加任何东西...

这是我的类的代码,是不是出了什么问题?

MyDialog.h

代码语言:javascript
复制
/*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

代码语言:javascript
复制
/*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(); }
EN

回答 3

Stack Overflow用户

发布于 2012-06-29 02:03:55

你是静态链接到库中的吗?

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

调用AfxGetResourceHandle来存储当前句柄,调用AfxSetResourceHandle来设置句柄到DLL。

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

票数 2
EN

Stack Overflow用户

发布于 2012-06-29 03:19:44

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

代码语言:javascript
复制
AFX_MANAGE_STATE(AfxGetStaticModuleState());
票数 1
EN

Stack Overflow用户

发布于 2012-06-29 15:36:22

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

不管怎样,谢谢你们!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11247498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档