獲得OnOK退出控制

2021-08-26 07:30:00 字數 1139 閱讀 3809

讀者朋友可能知道,cdialog的onok虛函式控制了ok按鈕,它負責觸發資料交換以及從對話方塊中退出,然而,enter鍵碰巧也具有同樣的效果。也許這是我們所需要的,也可能我們不需要這一功能,就是說不希望使用者在編輯框中按enter鍵後出現關閉程式的情況。怎麼解決這一問題?

一、 原因

當使用者按下enter鍵時,windows就會自動去找輸入焦點落在了哪乙個按鈕上,獲得焦點的按鈕的四周將被點線矩形包圍。如果所有按鈕都沒有獲得輸入焦點,windows就會自動去尋找程式或資源所指定的預設按鈕(預設按鈕邊框較粗)。如果對話方塊沒有預設按鈕,那麼即使對話方塊中沒有ok按鈕,onok函式也會自動被呼叫。

二、 解決辦法

為了使enter鍵無效,最簡單的辦法就是將cexdlg的onok函式寫成空函式,然後針對ok按鈕寫乙個新的函式來響應。下面是具體步驟:

1.用classwizard對映idok按鈕到onok虛函式。

在classwizard中,從cexdlg的object ids列表中選擇idok,然後單擊bn—clicked,這樣即產生了onok函式的原形和框架。

2.利用對話方塊編輯器改變ok按鈕的id。

選擇ok按鈕,將它的id由idok改為idc—ok,並去掉default button屬性的複選標記。這樣onok函式即被分離出來。

3.用classwizard建立乙個onclickedok成員函式。

在classwizard中,從cexdlg的object ids列表中選擇idc—ok,然後單擊bn—clicked,函式名用onclickedok,產生了onclickedok函式的原形和框架。

4.編輯**。

void cexdlg::onok()         void cexdlg::onclickedok()   

5.編譯並測試程式。

重新編譯程式,然後測試一下enter鍵,你會發現按下enter鍵後將沒有任何動作,而單擊ok按鈕則仍然會和以前一樣。

三、 oncancel的處理

正如enter鍵可以觸發對onok函式的呼叫一樣,esc鍵也可以觸發對oncancel函式的呼叫。它將導致控制從對話方塊中退出。不過讀者可以像對ok按鈕一樣處理,通過設定乙個無效的oncancel函式來防止這一情況的出現。

另外,本文示例是乙個基於對話方塊的應用,如果是一般應用程式中的對話方塊,本文介紹的方法一樣適用。

Python執行緒退出控制

ctypes模組控制線程退出 python中threading模組並沒有設計執行緒退出的機制,原因是不正常的執行緒退出可能會引發意想不到的後果。例如 執行緒正在持有乙個必須正確釋放的關鍵資源,鎖。執行緒建立的子執行緒,同時也將被殺掉。管理自己的執行緒,最好的處理方式是擁有乙個請求退出標誌,這樣每個執...

退出mysql控制台與退出mysql

mysql執行後,我們將進入mysql命令的控制台,下面列出可用的命令 與help命令等同,輸出此控制台下可用的子命令 clear c 清屏命令 connect r 重新連線到伺服器.可選引數有資料庫和伺服器 optional delimiter d 設定sql語句的分界符,預設是分號 ego g ...

迴圈退出 流程控制 while

for迴圈 針對列表,檔案迴圈 while迴圈 針對條件迴圈 while expression 直到表示式變為假,才退出迴圈 statement s while expression 直到表示式變為假,才執行 else 語句 statement s else statement s break 表示...