欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

MFC創(chuàng)建模態(tài)對話框和非模態(tài)對話框的方法

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

在MFC中對話框有兩種形式,一個是模態(tài)對話框(model dialog box),一個是非模態(tài)對話框(modeless dialog box)。本文對此分別簡述其創(chuàng)建方法。

一、模態(tài)對話框(model dialog box)

在程序運(yùn)行的過程中,若出現(xiàn)了模態(tài)對話框,那么主窗口將無法發(fā)送消息,直到模態(tài)對話框退出才可以發(fā)送。
點擊模態(tài)對話框中的OK按鈕,模態(tài)對話框會被銷毀。
創(chuàng)建一個模態(tài)對話框的代碼如下所示:

//創(chuàng)建一個模態(tài)對話框
CTestDialog td;
td.DoModal(); 

其中CTestDialog為我自己所新建的和一個對話框資源相關(guān)聯(lián)的對話框類。
可以創(chuàng)建一個布局模態(tài)對話框類變量,不用擔(dān)心它會隨著所在函數(shù)返回而被銷毀。因為DoModal()函數(shù)的一個功能是,當(dāng)前只能運(yùn)行此模態(tài)對話框,且停止主窗口的運(yùn)行,直到模態(tài)對話框退出,才允許主窗口運(yùn)行。
DoModal()函數(shù)也有顯示對話框的功能,所以也無需調(diào)用其他函數(shù)來顯示對話框。

二、非模態(tài)對話框(modaless dialog box)

在程序運(yùn)行的過程中,若出現(xiàn)了非模態(tài)對話框,主窗口還可以發(fā)送消息。
點擊非模態(tài)對話框中的OK按鈕,非模態(tài)對話框沒有銷毀,只是隱藏了。若想點擊OK按鈕時,非模態(tài)對話框也銷毀,那么CTestDialog類必須重載其基類CDialog的虛函數(shù)OnOK(),在此函數(shù)里調(diào)用DestroyWindow()來銷毀此對話框。

此處采用和上面一樣的方式來創(chuàng)建一個非模態(tài)對話框,代碼如下:

CTestDialog td;
td.Create(IDD_DIALOG1); //創(chuàng)建一個非模態(tài)對話框
td.ShowWindow(SW_SHOWNORMAL); //顯示非模態(tài)對話框

那么,在運(yùn)行時,你會發(fā)現(xiàn)此對話框無法顯示。這是因為你聲明的對話框變量td是局部變量,但這個函數(shù)返回時,td也被析構(gòu)了,所以無法顯示此對話框。

創(chuàng)建非模態(tài)對話框,必須聲明一個指向CTestDialog類的指針變量,且需要顯示的調(diào)用ShowWindow()才能將對話框顯示出來。有兩種創(chuàng)建方法:

(1)采用局部變量創(chuàng)建一個非模態(tài)對話框

//采用局部變量創(chuàng)建一個非模態(tài)對話框
CTestDialog *pTD = new CTestDialog();
pTD->Create(IDD_DIALOG1); //創(chuàng)建一個非模態(tài)對話框
pTD->ShowWindow(SW_SHOWNORMAL); //顯示非模態(tài)對話框

因為指針在聲明的時候是被放在堆棧中,只有整個應(yīng)用程序關(guān)閉后才會被銷毀,所以可以正常顯示對話框。
這種方法雖然不影響程序的運(yùn)行,可是指針pTD所指向的內(nèi)存卻導(dǎo)致不可用,這樣的編程很不好。

(2)采用成員變量創(chuàng)建一個非模態(tài)對話框
首先在你所要編寫的類的頭文件中聲明一個指針變量:

private:
CTestDialog *pTD;

然后再在相應(yīng)的CPP文件,在你要創(chuàng)建對話框的位置添加如下代碼:

//采用成員變量創(chuàng)建一個非模態(tài)對話框
pTD = new CTestDialog(); //給指針分配內(nèi)存
pTD->Create(IDD_DIALOG1); //創(chuàng)建一個非模態(tài)對話框
pTD->ShowWindow(SW_SHOWNORMAL); //顯示非模態(tài)對話框

最后在所在類的析構(gòu)函數(shù)中收回pTD所指向的內(nèi)存:

delete pTD;

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有