每当我尝试创建属性表时,我都会收到“调试断言失败”,这是我的第一个,我从“MFC Programming from the ground up”中复制它。
这是属性表类:
class CSamplePropSheet : public CPropertySheet
{
CPropDialog1 page1; //first page
CPropDialog2 page2; //second page
CPropDialog3 page3; //third page
public:
CSamplePropSheet() : CPropertySheet(){
Construct("Sample Property Sheet", this);
page1.Construct("PropDialog1", 0);
page2.Construct("PropDialog2", 0);
page3.Construct("PropDialog3", 0);
AddPage(&page1);
AddPage(&page2);
AddPage(&page3);
}
};
我在主窗口中声明了 Property Sheet 变量:
class CMainWin : public CFrameWnd
{
CSamplePropSheet m_PropSheet;
public:
CMainWin();
afx_msg void OnActivate();
afx_msg void OnExit();
afx_msg void OnHelp();
DECLARE_MESSAGE_MAP()
};
然后我在这里打电话:
afx_msg void CMainWin::OnActivate()
{
m_PropSheet.DoModal(); //activate modal property sheet
}
报错时,指向这段代码:
int AFXAPI AfxMessageBox(UINT nIDPrompt, UINT nType, UINT nIDHelp)
{
CString string;
if (!string.LoadString(nIDPrompt))
{
TRACE(traceAppMsg, 0, "Error: failed to load message box prompt string 0x%04x.\n",
nIDPrompt);
ASSERT(FALSE);
}
if (nIDHelp == (UINT)-1)
nIDHelp = nIDPrompt;
return AfxMessageBox(string, nType, nIDHelp);
}
是不是漏了什么?程序菜单选项的其余部分都有效,但用于调出属性表的“激活”按钮除外。
最佳答案
看起来您正在错误地使用属性页 page1
、page2
和 page3
的 Construct
方法.您可能假设在该语句中 Construct("PropDialog1", 0);
"PropDialog1"是页面的标题。但是,它是资源模板的名称。请阅读here关于如何使用资源模板。
我建议您使用不同的 Construct 方法重载:
void Construct(
UINT nIDTemplate,
UINT nIDCaption = 0
);
使用此重载,您可以将与属性页关联的对话框资源 ID 指定为第一个参数,将页面标题的字符串资源 ID 指定为第二个参数。例如:
page1.Construct(IDD_PROP_PAGE1, IDS_PAGE1_CAPTION);
关于c++ - 尝试创建属性表时 mfc 断言失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19258700/