【发布时间】:2015-03-30 11:02:23
【问题描述】:
我想在一个项目中使用基于 CPropertySheet 的应用程序,但我不想使用 CPropertySheet 类附带的那些默认的 OK、Cancel、Help 和 Apply 按钮。因此,我销毁了 OnInitDialog 上的那些窗口。以下是参考代码:
BOOLCProductUI::OnInitDialog()
{
CPropertySheet::OnInitDialog();
CRect rect;
CButton *pTempBtn;
CButton SaveChanges;
pTempBtn = reinterpret_cast<CButton *>(GetDlgItem(IDHELP));
if (NULL != pTempBtn)
{
pTempBtn->GetWindowRect(&rect);
pTempBtn->DestroyWindow();
}
pTempBtn = reinterpret_cast<CButton *>(GetDlgItem(IDOK));
if (NULL != pTempBtn)
{
pTempBtn->DestroyWindow();
}
pTempBtn = reinterpret_cast<CButton *>(GetDlgItem(IDCANCEL));
if (NULL != pTempBtn)
{
pTempBtn->DestroyWindow();
}
pTempBtn = reinterpret_cast<CButton *>(GetDlgItem(ID_APPLY_NOW));
if (NULL != pTempBtn)
{
ScreenToClient(&rect);
pTempBtn->MoveWindow(rect);
pTempBtn->SetWindowText(_T("Save Changes"));
}
UpdateData(FALSE);
return TRUE;
}
CProductUI 是 CPropertySheet 的一个类。
但是,当我在调试模式下使用 VC++2008 编译程序时,我在行
处收到 Debug Assertion Failed 错误消息
"CPropertySheet::OnInitDialog();"
谁能解释一下为什么会这样?
【问题讨论】:
-
Assert message 应该可以帮助您了解问题所在。一般来说,不要销毁它们,只需隐藏即可。
-
我的第一个动作是摧毁它们。我意识到 DestroyWindow() 会引起一些问题,但是我评论了这些调用并尝试使用 ShowWindow(SW_HIDE) 运行我的应用程序,但在调试模式下遇到了相同的调试断言。
-
确切的错误信息是什么?连同行号(在同一条消息中),它应该突出显示出了什么问题。
-
调试断言失败错误消息框包含以下程序:(我的 exe 的路径)文件:f:\dd\vctool\vc7libs\ship\atlmfc\include\afxcmn.inl 行:268
-
LOL 是的,我有 MFC 源代码,但您可以看到 OnInitDialog() 中有许多 ASSERT。哪一个失败了?
标签: c++ mfc dialog cpropertysheet