c++ - MFC CDialog 不显示

标签 c++ visual-studio winapi mfc cdialog

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

这是我类(class)的代码,有什么问题吗?

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(); }

最佳答案

您是否静态链接库?

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

调用AfxGetResourceHandle 存储当前句柄,调用AfxSetResourceHandle 将句柄设置为DLL。

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

关于c++ - MFC CDialog 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11247498/

相关文章:

c++ - 谁包括谁得到定义?

c++ - 在编译时保存静态二叉树的简单方法

visual-studio - 是否可以更改 IntelliJ IDEA 中的调试快捷键

c++ - 检查windows shell是否加载完启动程序

c++ - 在屏幕上创建计时器的最佳方式

c++ - 现代 C++ 重复代码设定次数的方法

c++ - C++中如何判断一个整数类型是否是内置类型?

c# - Web 应用程序在 Visual Studio 和 Azure 上显示不同的屏幕

c# - 我在更新我的 ComboBox 时遇到问题,一旦我想起填充 ComboBox,我就会得到所有重复项

c++ - 如何将 Button_SetElevationRequiredState 与 QPushButton 一起使用?