明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

獲得OnOK退出控制

[摘要]作者:黃向明 讀者朋友可能知道,CDialog的OnOK虛函數(shù)控制了OK按鈕,它負(fù)責(zé)觸發(fā)數(shù)據(jù)交換以及從對(duì)話框中退出,然而,Enter鍵碰巧也具有同樣的效果。也許這是我們所需要的,也可能我們不需要這一功能,就是說不希望用戶在編輯框中按Enter鍵后出現(xiàn)關(guān)閉程序的情況。怎么解決這一問題?  一、 原...
作者:黃向明
  
讀者朋友可能知道,CDialog的OnOK虛函數(shù)控制了OK按鈕,它負(fù)責(zé)觸發(fā)數(shù)據(jù)交換以及從對(duì)話框中退出,然而,Enter鍵碰巧也具有同樣的效果。也許這是我們所需要的,也可能我們不需要這一功能,就是說不希望用戶在編輯框中按Enter鍵后出現(xiàn)關(guān)閉程序的情況。怎么解決這一問題?

  一、 原因

  當(dāng)用戶按下Enter鍵時(shí),Windows就會(huì)自動(dòng)去找輸入焦點(diǎn)落在了哪一個(gè)按鈕上,當(dāng)獲得焦點(diǎn)的按鈕的四周將被點(diǎn)線矩形包圍。如果所有按鈕都沒有獲得輸入焦點(diǎn),Windows就會(huì)自動(dòng)去尋找程序或資源所指定的默認(rèn)按鈕(默認(rèn)按鈕邊框較粗)。如果對(duì)話框沒有默認(rèn)按鈕,那么即使對(duì)話框中沒有OK按鈕,OnOK函數(shù)也會(huì)自動(dòng)被調(diào)用。

  二、 解決辦法

  為了使Enter鍵無效,最簡(jiǎn)單的辦法就是將CExDlg的OnOK函數(shù)寫成空函數(shù),然后針對(duì)OK按鈕寫一個(gè)新的函數(shù)來響應(yīng)。下面是具體步驟:

    首先建立一個(gè)以Ex為名的基于對(duì)話框的程序。

  1.用ClassWizard映射IDOK按鈕到OnOK虛函數(shù)。

  在ClassWizard中,從CExDlg的Object Ids列表中選擇IDOK,然后單擊BN_CLICKED,這樣即產(chǎn)生了OnOK函數(shù)的原形和框架。

  2.利用對(duì)話框編輯器改變OK按鈕的ID。

  選擇OK按鈕,將它的ID由IDOK改為IDC_OK,并去掉Default Button屬性的復(fù)選標(biāo)記。這樣OnOK函數(shù)即被分離出來。

  3.用ClassWizard創(chuàng)建一個(gè)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.編譯并測(cè)試程序。

  重新編譯程序,然后測(cè)試一下Enter鍵,你會(huì)發(fā)現(xiàn)按下Enter鍵后將沒有任何動(dòng)作,而單擊OK按鈕則仍然會(huì)和以前一樣。

  三、 OnCancel的處理

  正如Enter鍵可以觸發(fā)對(duì)OnOK函數(shù)的調(diào)用一樣,Esc鍵也可以觸發(fā)對(duì)OnCancel函數(shù)的調(diào)用。它將導(dǎo)致控制從對(duì)話框中退出。不過讀者可以像對(duì)OK按鈕一樣處理,通過設(shè)置一個(gè)無效的OnCancel函數(shù)來防止這一情況的出現(xiàn)。

  另外,本文示例是一個(gè)基于對(duì)話框的應(yīng)用,如果是一般應(yīng)用程序中的對(duì)話框,本文介紹的方法一樣適用。 


標(biāo)簽:獲得OnOK退出控制