1

我想为项目使用基于 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 编译程序时,我在“ CPropertySheet::OnInitDialog();
行收到调试断言失败错误消息,谁能解释一下为什么会发生这种情况?

4

2 回答 2

-1

根据如何隐藏 CPropertySheet 中的应用按钮。销毁窗口不是隐藏属性表默认按钮的正确解决方案。我建议你使用"ShowWindow()"。但是正如您已经提到的,您的 showwindow() 也会产生问题,如果您的调用正确,这是不可能的。顺其自然,如果您的 ShowWindow() 在“OnInitDialog()”函数中不起作用,那么最好将此函数移至“OnCreate()”。如果它不起作用,请分享您的整个 .H 和 .CPP 文件。

于 2015-03-30T11:30:36.623 回答
-2
  1. 你应该打电话ShowWindow (SW_HIDE);而不是DestroyWindow();
  2. 也不需要由toCWnd*返回。GetDlgItem()CButton*
  3. 还请注释掉您的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;

重要提示:一般来说,请在调试模式下运行您的应用程序以查看它断言的位置。

于 2015-03-30T11:11:43.690 回答