我刚刚遇到了CPropertyPage的一个问题。
我一直试图使用OnOK处理程序进行一些验证:
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来知道它是否应该关闭。
发布于 2020-06-18 11:03:03
您需要覆盖属性页的父属性表类的OnCommand处理程序,并拦截IDOK命令的单击(这将在wParam参数中给出)。如果不调用基类OnCommand,但仍然返回TRUE以指示已处理了命令,则属性表将不会关闭:
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也是一样的。
https://stackoverflow.com/questions/62446954
复制相似问题