【问题标题】:MFC CDialog not showingMFC CDialog 不显示
【发布时间】:2012-06-28 15:03:42
【问题描述】:

这是我的问题: 在我的解决方案中,我有 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(); }

【问题讨论】:

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


    【解决方案1】:

    你是静态链接库吗?

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

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

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

    【讨论】:

      【解决方案2】:

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

      AFX_MANAGE_STATE(AfxGetStaticModuleState());
      

      【讨论】:

        【解决方案3】:

        我终于找到了,我使用的是第二个资源文件(*.rc),我只需通过“资源视图”中的“设置包含”对话框将第二个包含到第一个文件中作为“编译-时间指令”

        谢谢大家!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-14
          • 2012-06-26
          • 2020-11-20
          • 2011-01-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多