關閉對話方塊,OnClose和OnCancel
我們知道,在對話方塊中,遮蔽ESC鍵自動退出可以選擇過載OnCancel為啞函式的方法:
void CXXXXDlg::OnCancel()
{
// TODO: Add your specialized code here and/or call the base class
//CDialog::OnCancel(); //disable OnCancel
}
但是,這樣一來,右上角的關閉按鈕也不起作用了,是因為點選關閉按鈕時會自動呼叫CXXXXDlg::OnCancel()l從而完成對話方塊的關閉,由於CXXXXDlg::OnCancel()中什麼也沒有做,因此對話方塊就無法關閉。修改這個bug需要過載OnClose訊息函式:
void CXXXXDlg::OnClose()
{
// TODO: Add your message handler code here and/or call defaultCDialog::OnCancel(); //add OnCancel here
CDialog::OnClose();
}
由於OnCancle實際上是呼叫Enddialog(IDCANCEL),所以也可以按照如下修改:
void CXXXXDlg::OnClose()
{
// TODO: Add your message handler code here and/or call defaultEndDialog(IDCANCEL);
CDialog::OnClose();
}
我們知道OnClose函式是WM_CLOSE訊息的響應函式,但是為什麼傳送WM_CLOSE訊息後會自動呼叫CXXXXDlg::OnCancel()?自己跟了一下程式碼,大致梳理了一下流程:
WM_CLOSE
-> 進入void CXXXXDlg::OnClose()
-> CDialog::OnClose()
-> void CXXXXDlg::OnClose()返回
-> void CXXXXDlg::OnCancel()
比較神奇的是 CDialog::OnClose() 函式:
這個函式中不知道以何種方式告知系統在 CXXXXDlg::OnClose() 返回 後去呼叫 CXXXXDlg::OnCancel(),在除錯中如果把這個函式註釋掉,則不會轉入CXXXXDlg::OnCancel()函式中。而且,對於CXXXXDlg::OnCancel()函式的呼叫是在CXXXXDlg::OnClose() 返回 後,如果採用訊息,我覺得是否應該不會在返回後呼叫,而應該在訊息傳送後馬上處理。
網上找了很久也沒有得到答案,暫時記錄在此,也許哪天自己明白了,或是被牛人發現了給出解答。
相關推薦
關閉對話方塊,OnClose和OnCancel
我們知道,在對話方塊中,遮蔽ESC鍵自動退出可以選擇過載OnCancel為啞函式的方法: void CXXXXDlg::OnCancel() { // TODO: Add your specialized code here
關於EasyUI對話方塊,表格和選單元件在IE下的相容性處理方法
EasyUI版本:V1.4 JQuery版本:V1.11.1 一、對話方塊 定義對話方塊: <div id="test_dialog" class="easyui-dialog" closed
彈出對話方塊,點選確定關閉對話方塊,返回值給父頁面
父頁面: <input id="btnSelect" type="button" value="..." onclick="organTree('txt_GLJG','hid_gljg');" class ="btn" /> <script typ
JavaScript操作BOM物件 - document物件; history 和 location物件 ,對話方塊,Date時間物件
getElementById返回擁有指定id的第一個物件(注意只是一個且是第一個)getElementsByName返回帶有指定名稱的物件集合getElementsBytagNam返回指定標籤的物件集合例html程式碼<div class="content" > <div cl
(shell練習1)zenity圖形介面之資訊對話方塊和單複選對話方塊,以及while,for迴圈的練習
涵蓋內容包括 1,shell的while迴圈 2,shell的for迴圈 3,shell關於字串的擷取(精華之處) 4,shell的選擇分支語句if 5,zenity資訊對話方塊 6,zenity單選對話方塊 7,zenity複選對話方塊 8,shell不
【Bootstrap】一個在當前網頁彈出的對話方塊,可以關閉,不用跳轉,非彈窗
使用彈窗在網頁中顯示簡訊息還行,雖然不那麼地友好。然而,彈窗對於如同網站服務條款的長資訊就無能為力的了。這是需要使用一個叫模態框modal的東西,並且在模態框裡面嵌入一個多行文字框textarea。 這個東西,如果要手工寫JavaScript程式碼就太難做了,但是使用Boo
pyqt彈出新對話方塊,以及關閉對話方塊獲取資料
from PyQt4 import QtGui,QtCore import sys class Web_Browser(QtGui.QDialog): def __init__(self,parent=None): QtGui.QWidget.__i
java 自定義確認取消的Dialog對話方塊,10秒之後自動關閉
問題如下: 點選一個按鈕,彈出一個對話方塊,對話方塊裡面包含 確定 和 取消 按鈕 若點選確定,返回值為0,點選取消,返回值為1 若超過10秒不點選,提示視窗自動關閉,返回值為-5 後續可以根據返回值來做各種不同的判斷。 1.TimerTest 主程式,先執行main方
QT對話方塊去掉幫助和關閉按鈕 攔截QT關閉視窗的CloseEvent
建了一個對話方塊,我不想把邊框去掉,只想去掉關閉按鈕, setWindowFlags(windowFlags()&~Qt::WindowCloseButtonHint&~Qt::WindowContextHelpButtonHint); 結果那個問號的按鈕
怎樣在關閉窗體時彈出一個確認對話方塊,確定再退出?
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
MFC建立,銷燬,開啟模式對話方塊,關閉模式對話方塊等函式呼叫順序
MFC應用程式建立視窗的過程1.PreCreateWindow() 該函式是一個過載函式,在視窗被建立前,可以在該過載函式中改變建立引數 (可以設定視窗風格等等)2.PreSubclassWindow() 這也是一個過載函式,允許首先子分類一個視窗3.OnG
QT開啟檔案--對話視窗,名稱和路徑提取
QT一般要用到檔案選操作,以開啟圖片為例,以下為部分程式碼: QImage openImage() { QString filename = QFileDialog::getOpenFileName(this, tr("choose a pic"), "", tr("Imag
MFC子對話方塊呼叫主對話方塊的變數和函式
1、在子對話方塊中定義主對話方塊的物件指標: CSensorSysDlg *parent = (CSensorSysDlg*)GetParent();//CSensorSysDlg是主對話方塊對應的類 2、呼叫 //呼叫變數 parent->i;//i是主對話方塊內int型別的
SQL Sever無法開啟連結對話方塊,未將物件引用設定到物件的例項。(AppIDPackage)
SQL Sever無法開啟連結對話方塊,未將物件引用設定到物件的例項。(AppIDPackage) 一般會出現這問題的原因是:安裝了VS。 一:C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\找到machine.config,把它刪除
phpstorm IDEA 雙擊Shift鍵會彈出 SearchEverywhere 對話方塊,如何取消這個功能
解決方法:一:Open lib/resources.jar/idea/PlatformActions.xml and remove or comment such line: <action id="SearchEverywhere" class="com.intel
純JS實現Toas對話方塊,無HTML結構
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>toast</tit
MFC如何拷貝資源(對話方塊,工具欄等)
MFC的資源機制是兩個檔案的配合,xxx.rc(xxx為專案名稱)檔案和resource.h檔案的配合,res.rc以指令碼的形式描述了資源的形式,如***對話方塊大小,ID,有什麼按鈕,按鈕的ID等等 如“關於”對話方塊在rc檔案內的描述(怎麼開啟,找到rc檔案,資源管
Qt 新增一個QFrame的對話方塊,設定按鈕的樣式表
新增一個QFrame的對話方塊 設定按鈕的樣式表 QPushButton#pdf2file { border:0px; background-image:url(:/images/btn-menu-02.png); font:16px "微軟雅黑"; colo
對話方塊,選單如何響應:ON_UPDATE_COMMAND_UI訊息
需要增添虛擬函式: BOOL CXXXDlg::ContinueModal() { CMenu* p_main_mu = this->GetMenu(); CCmdUI cmd_ui; for(u_int n = 0; n < p_main_mu->
在標籤控制元件中放入對話方塊,且對話方塊裡是列表
背景:公司要求將相關資訊顯示在列表中,且利用標籤控制元件來進行切換。 問題描述:之前是將相關列表的初始化是放在對話方塊的OnInitDialog()函式中,且保證了標籤控制元件的切換沒有問題。但是在切換的過程中,當焦點不在標籤項,點選其它標籤項再切換到原標籤項時,原標籤項中並不能顯示出