2014-12-29 81 views
1

我的对话框中有一个CEdit字段,我已经实现EN_KILLFOCUS,所以当用户输入无效数据时,当焦点离开这个字段并且焦点返回时显示一条警告消息到CEdit字段,以便用户可以输入正确的数据。如果用户输入无效数据并单击CANCEL按钮,则还会显示一条警告消息,这是不希望的,因为用户无论如何都试图取消他的动作。当用户点击CANCEL按钮时,我尝试过实现PostQuitMessage,但是这会关闭整个应用程序。当用户点击CANCEL按钮时,我只想关闭我的对话框。点击“取消”按钮后,是否有任何方法可以立即关闭对话框。这是我试过的代码。关闭一个对话框,点击取消按钮忽略EN_KILLFOCUS

void CMARPropWnd::OnParentNotify(UINT message, LPARAM lParam) 
{ 
    CCDialog::OnParentNotify(message, lParam); 
    // TODO: Add your message handler code here 
    CPoint ptButtonDown(LOWORD(lParam),HIWORD(lParam)); 
    if ((message == WM_LBUTTONDOWN) && (ChildWindowFromPoint(ptButtonDown) == GetDlgItem(eMARPropWndCancelBtnId))) 
    { 
     PostQuitMessage(0); 
    } 
} 
+0

Vaidation已在不同的项目中实施。我不能做任何事情:)真的很感激,如果有一些解决方案 –

+0

您是否尝试发布WM_CLOSE消息? – rrirower

回答

0

尝试

OnCancel(); 

代替PostQuitMessage(0);

请注意,OnCancel()是CDialog的虚拟方法,因此这是“最正确的”,并且将执行任何可能覆盖默认CDialog行为的特殊代码。

+0

实际上,OnCancel试图通过实现EndDialog()来关闭对话框。 EndDialog将键盘焦点从CEdit字段移开,这又使验证发生并显示在此不需要的警告消息。那么在这里可以使用EndDialog以外的东西吗? –

+0

添加一个bool成员'm_bInsideOnCancel',在ctor中将其设置为'false'。重写'OnCancel()',将'm_bInsideOnCancel'设置为'true',然后返回调用'BASE_CLASS :: OnCancel();'。在你的EN_KILLFOCUS通知方法中,在进行任何处理之前确保'!m_bInsideOnCancel'。这会起作用吗? – franji1

+0

感谢您的回应,但实际上EN_KILLFOCUS是在另一个项目中实施的,我无法修改它。没有办法,我可以处理它,而不添加此成员变量? –

相关问题