2014-12-29 79 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是在另一個項目中實施的,我無法修改它。沒有辦法,我可以處理它,而不添加此成員變量? –

相關問題