这是我的问题: 在我的解决方案中,我有2个项目,一个是lib,我在其中创建了一个ressource文件(mylib.rc)和一个对话框模板。然后我创建了一个继承CDialog并使用此模板的类。但是当我实例化它并调用DoModal()时,没有任何附加内容......
这是我班级的代码,它有什么问题吗?
/*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*/
#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(); }
答案 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”对话框作为“编译 - 时间指令“
无论如何,谢谢你!