1

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

这是我班级的代码,有什么问题吗?

我的对话.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();
};

我的对话.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(); }
4

3 回答 3

2

你是静态链接库吗?

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

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

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

于 2012-06-28T18:03:55.497 回答
1

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

AFX_MANAGE_STATE(AfxGetStaticModuleState());
于 2012-06-28T19:19:43.600 回答
0

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

无论如何,谢谢你们!

于 2012-06-29T07:36:22.207 回答