c++ - 尝试创建属性表时的mfc断言失败

  显示原文与译文双语对照的内容
74 2

当我试图创建属性表时,我得到"调试断言失败",这是我的第一个属性,我从"从底层开始的mfc编程"复制它。

下面是属性表类:


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

我在主窗口中声明了属性表变量:


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

除了激活按钮,除了激活按钮以外,还有它的他的程序菜单选项工作。

时间: 原作者:

101 3

看起来你对属性页 page1page2page3 使用了 Construct 方法。 你可能假设在这个语句中 Construct("PropDialog1", 0);"propdialog1"是页面的标题。 但是,它是资源模板的名称。 请阅读这里的,关于如何使用资源模板。

建议使用不同的构造方法重载:


void Construct( 
 UINT nIDTemplate, 
 UINT nIDCaption = 0 
); 

使用这里重载,可以将与属性页相关联的对话框资源的of指定为第二个参数。 比如:


page1.Construct(IDD_PROP_PAGE1, IDS_PAGE1_CAPTION);

原作者:
...