我想在项目中使用基于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(); ”
任何人都可以详细说明为什么会发生这种情况吗?
答案 0 :(得分:-1)
每How to Hide the Apply Button in CPropertySheet。销毁窗口不是隐藏属性表默认按钮的正确解决方案。我建议你使用&#34; ShowWindow()&#34; 。但正如您已经提到的那样,showwindow()也会产生问题,如果您的通话是正确的,这是不可能的。如果您的ShowWindow()不在&#34; OnInitDialog()&#34;函数然后更好地将此函数移动到&#34; OnCreate()&#34;。如果它不起作用,那么请分享你的整个.H和.CPP文件。
答案 1 :(得分:-2)
ShowWindow (SW_HIDE);
而不是DestroyWindow();
CWnd*
返回的GetDlgItem()
投射到CButton*
。 CButton SaveChanges;
声明。您
不需要它。您也可以使用内置标志来执行此操作:
CMyPropertyPage myPage;
myPage.m_psp.dwFlags &= ~PSP_HASHELP;
myPropertySheet.AddPage(&myPage);
myPropertySheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;
myPropertySheet.m_psh.dwFlags &= ~PSH_HASHELP;
重要提示:一般情况下,请在调试模式下运行您的应用程序以查看它的ASSERT位置。