這篇文章主要講解了“怎么用VC制作動態(tài)彈出的對話框”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用VC制作動態(tài)彈出的對話框”吧!
創(chuàng)新互聯(lián)2013年開創(chuàng)至今,先為鳳岡等服務(wù)建站,鳳岡等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為鳳岡企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
在“網(wǎng)絡(luò)螞蟻”中,如果在下載過程中有錯誤發(fā)生,或是提示下載完成時,你都可以在屏幕中央看到一個由小變大、動態(tài)彈出的對話框,那么,這個動態(tài)彈出的對話框是如何實現(xiàn)的呢?
一、選擇方法
通常,我們可以在對話框的WM_INITDIALOG事件的響應(yīng)函數(shù)中加入對話框的一些初始化設(shè)置,比如改變窗口的位置及大小。同樣,我們也可以在WM_INITDIALOG事件的響應(yīng)函數(shù)中讓對話框由小到大地顯示。但是,如何改變對話框的大小呢?在編程過程中,我們通常是利用MoveWindow函數(shù)來動態(tài)調(diào)整對話框的大小,但是MoveWindow函數(shù)有其局限性:一是它的速度較慢;二是由于眾所周知的MFC內(nèi)存泄漏的原因,如果重復(fù)調(diào)用MoveWindow函數(shù)來改變對話框的大小,MoveWindow不能夠?qū)⑵聊磺濉案蓛簟保ㄟ@點你可以在實際編程中試一下),這顯然不是我們所需要的。能不能找到一種其他的方法來快速地改變窗口大小呢?我們知道,用SetWindowRgn函數(shù)能夠改變窗口的顯示區(qū)域,那么,在對話框顯示之前,讓程序?qū)υ捒蛳入[藏起來,然后讓對話框的顯示區(qū)域不斷變大,這樣就實現(xiàn)了對話框的動態(tài)顯示。
在繼續(xù)介紹之前,我們先來介紹一下SetWindowRgn的具體用法,以下是其調(diào)用格式:
int SetWindowRgn( HRGN hRgn, BOOL bRedraw );
hRgn:指向一區(qū)域的句柄,通常該參數(shù)是由CRgn對象創(chuàng)建的。
bRedraw:指明在設(shè)定窗口顯示區(qū)域之后系統(tǒng)是否進(jìn)行窗口重繪操作。
二、應(yīng)用實例
接下來我們以讓程序的“幫助對話框”動態(tài)彈出為例,介紹如何通過編程的方式來實現(xiàn)對話框的動態(tài)彈出顯示。在CAboutDlg類中加入對WM_INITDIALOG的映射,并編輯其響應(yīng)函數(shù)OnInitDialog,該函數(shù)的具體內(nèi)容設(shè)置如下:
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//隱藏對話框
ShowWindow(SW_HIDE);
CRect dlgRect;
GetClientRect(&&dlgRect);
CPoint centerPoint;
centerPoint.x=dlgRect.Width()/2;
centerPoint.y=dlgRect.Height()/2;
//得到對話框的中點坐標(biāo)
CRgn testrgn;
this-〉ShowWindow(SW_HIDE);
int m=GetSystemMetrics(SM_CYSIZEFRAME);
//以下代碼實現(xiàn)對話框的動態(tài)彈出
for (int i=10;i〈dlgRect.Width()/2+2m;i+=1)
{
testrgn.CreateRectRgn(centerPoint.x-i,centerPoint.y-i,centerPoint.x+i,centerPoint.y+i);
SetWindowRgn((HRGN) testrgn,TRUE);
ShowWindow(SW_SHOW);
CenterWindow();
testrgn.DeleteObject();
}
return TRUE;
}
該程序的代碼比較簡單,編譯之后進(jìn)入程序的幫助選單,你會看見一個由小變大的對話框躍然于屏幕之上。
感謝各位的閱讀,以上就是“怎么用VC制作動態(tài)彈出的對話框”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么用VC制作動態(tài)彈出的對話框這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!