首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有条件地阻止CPropertySheet从页OnOK按钮处理程序关闭

有条件地阻止CPropertySheet从页OnOK按钮处理程序关闭
EN

Stack Overflow用户
提问于 2020-06-18 09:37:55
回答 1查看 318关注 0票数 2

我刚刚遇到了CPropertyPage的一个问题。

我一直试图使用OnOK处理程序进行一些验证:

代码语言:javascript
复制
void CCalendarSettingsGooglePage::OnOK()
{
    bool bHandle = false;

    UpdateData(TRUE);

    // AJT v20.2.0 — We need to pass "true" so that the error message will display!
    if (ValidSettings(true))
    {
        bHandle = true;
        SaveSettings();
    }

    if (bHandle)
        CMFCPropertyPage::OnOK();
}

问题是,这张纸还在关闭。我曾希望阻止CMFCPropertyPage::OnOK会阻止收盘价的关闭。但事实并非如此。

我从here了解到,sheet的 OnOK正在进行EndDialog(IDOK)调用。但我不想让我的床单变得复杂。测试在这一页中。因此,当用户单击OK按钮时,我需要一个was来知道它是否应该关闭。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-18 11:03:03

您需要覆盖属性页的父属性表类的OnCommand处理程序,并拦截IDOK命令的单击(这将在wParam参数中给出)。如果不调用基类OnCommand,但仍然返回TRUE以指示已处理了命令,则属性表将不会关闭:

代码语言:javascript
复制
BOOL MyPropertySheet::OnCommand(WPARAM wParam, LPARAM lParam)
{
    if (wParam == IDOK) { // OK button clicked...
        if (!ValidSettings(true)) return TRUE; // NOT valid, prevent further processing.
    }
    // You can also intercept the "Apply" command by testing for ID_APPLY_NOW

    // Everything is OK, so continue processing ...
    return CMFCPropertySheet::OnCommand(wParam, lParam);
}

请注意,我假设您的父级是从CMFCPropertySheet派生的,但是对于“旧的”CPropertySheet也是一样的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62446954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档