獲得OnOK退出控制
發(fā)表時間:2024-06-20 來源:明輝站整理相關軟件相關文章人氣:
[摘要]作者:黃向明 讀者朋友可能知道,CDialog的OnOK虛函數(shù)控制了OK按鈕,它負責觸發(fā)數(shù)據(jù)交換以及從對話框中退出,然而,Enter鍵碰巧也具有同樣的效果。也許這是我們所需要的,也可能我們不需要這一功能,就是說不希望用戶在編輯框中按Enter鍵后出現(xiàn)關閉程序的情況。怎么解決這一問題? 一、 原...
作者:黃向明
讀者朋友可能知道,CDialog的OnOK虛函數(shù)控制了OK按鈕,它負責觸發(fā)數(shù)據(jù)交換以及從對話框中退出,然而,Enter鍵碰巧也具有同樣的效果。也許這是我們所需要的,也可能我們不需要這一功能,就是說不希望用戶在編輯框中按Enter鍵后出現(xiàn)關閉程序的情況。怎么解決這一問題?
一、 原因
當用戶按下Enter鍵時,Windows就會自動去找輸入焦點落在了哪一個按鈕上,當獲得焦點的按鈕的四周將被點線矩形包圍。如果所有按鈕都沒有獲得輸入焦點,Windows就會自動去尋找程序或資源所指定的默認按鈕(默認按鈕邊框較粗)。如果對話框沒有默認按鈕,那么即使對話框中沒有OK按鈕,OnOK函數(shù)也會自動被調(diào)用。
二、 解決辦法
為了使Enter鍵無效,最簡單的辦法就是將CExDlg的OnOK函數(shù)寫成空函數(shù),然后針對OK按鈕寫一個新的函數(shù)來響應。下面是具體步驟:
首先建立一個以Ex為名的基于對話框的程序。
1.用ClassWizard映射IDOK按鈕到OnOK虛函數(shù)。
在ClassWizard中,從CExDlg的Object Ids列表中選擇IDOK,然后單擊BN_CLICKED,這樣即產(chǎn)生了OnOK函數(shù)的原形和框架。
2.利用對話框編輯器改變OK按鈕的ID。
選擇OK按鈕,將它的ID由IDOK改為IDC_OK,并去掉Default Button屬性的復選標記。這樣OnOK函數(shù)即被分離出來。
3.用ClassWizard創(chuàng)建一個OnClickedOK成員函數(shù)。
在ClassWizard中,從CExDlg的Object Ids列表中選擇IDC_OK,然后單擊BN_CLICKED,函數(shù)名用OnClickedOK,產(chǎn)生了OnClickedOK函數(shù)的原形和框架。
4.編輯代碼。
void CExDlg::OnOK()
{
// TODO: Add extra validation here
// CDialog::OnOK();
}
void CExDlg::OnClickedOk()
{
// TODO: Add your control notification handler code here
CDialog::OnOK();
}
5.編譯并測試程序。
重新編譯程序,然后測試一下Enter鍵,你會發(fā)現(xiàn)按下Enter鍵后將沒有任何動作,而單擊OK按鈕則仍然會和以前一樣。
三、 OnCancel的處理
正如Enter鍵可以觸發(fā)對OnOK函數(shù)的調(diào)用一樣,Esc鍵也可以觸發(fā)對OnCancel函數(shù)的調(diào)用。它將導致控制從對話框中退出。不過讀者可以像對OK按鈕一樣處理,通過設置一個無效的OnCancel函數(shù)來防止這一情況的出現(xiàn)。
另外,本文示例是一個基于對話框的應用,如果是一般應用程序中的對話框,本文介紹的方法一樣適用。