mfc關閉模態dialog的正確方式

2021-06-29 06:00:44 字數 1147 閱讀 9307

在模態對話方塊中:

正常的使用者觸發的onok

、oncancel

訊息都是通過呼叫函式enddialog去關閉模態對話方塊的,

enddialog函式並不立即清除對話方塊。而是設定乙個標誌,並且允許對話方塊應用程式把控制權返回系統。系統在試圖從應用程式佇列檢索下乙個訊息之前檢測標誌。如果已經設定了標誌則系統中止訊息迴圈,清除對話方塊,所以當我們想在**中去呼叫enddialog函式去結束對話方塊,最後再釋放對話方塊物件。

函式原型:bool enddialog(hwnd hdlg,int nresult); 

引數: 

hdlg:表示要被清除的對話方塊視窗。 

nresult:指定從建立對話方塊函式返回到應用程式的值。 

返回值:如果函式呼叫成功,則返回值為非零值;如果函式呼叫失敗則返回值為零。若想獲得錯誤資訊請呼叫getlasterror函式

enddialog 與 destroywindow 的區別

(1) enddialog(-1);

關閉模態對話方塊,並且將引數作為父對話方塊呼叫的返回值。

(2)  destroywindow();  ::postquitmessage(0);

destroywindow 關閉非模態對話方塊。 退出訊息迴圈,真正結束程序。有不少程式視窗關閉,但是不等於退出執行。cdialog::enddialog

void enddialog(int nresult);

引數:nresult

對話方塊返回的值,用於呼叫者domodal。

說明:

呼叫該成員函式來中止乙個模態對話方塊。該函式返回nresult。無論模態對話方塊是何時被建立的,必須使用enddialog來結束處理。

可以隨時呼叫enddialog,即使在使用oninitdialog時,即在對話方塊顯示或獲得輸入焦點之前就關閉它。

enddialog不會立即關閉對話方塊。它設定了乙個標記,用以指定在當前訊息處理程式返回時就關閉對話方塊。

ps:今天遇到的問題:由於在模態對話方塊中呼叫了其他結束函式,沒有呼叫enddialog函式終止訊息迴圈,所以程序無法正常退出,被系統掛起。

QML模態對話方塊Dialog關閉方式

qt 版本 5.10 只好去看原始碼,結果發現有closepolicy這個屬性,簡單有效。沒有什麼是原始碼不能解決的 qt qt5.10.0 5.10.0 src qtquickcontrols2 src quicktemplates2 qquickpopup p.h enum closepolic...

jquery ui的dialog元件關閉未移除問題

開發中遇到即使進行頁面切換,原頁面內初始化的dialog元件未移除的問題。在網路上一通搜尋後,有說用remove的,有說用clone的,雖然能解決問題,但使用起來還是有不少麻煩。後還是靠自己去檢視dialog原始碼才發現dialog元件其實預設是掛載到了標籤下,所以而非當前iframe或者load方...

MFC的Dialog下編寫OPENGL !

環境 vc6 1.新建 windows 的 dialog 體並可以執行!所有的設定全部為預設 2.新建 控制項 改id 為idc gl screen 3.新建類 cglscreen 其父類為 cwnd 4.新建函式 oninit cpaintdc dc this device context for...