使用MFC創(chuàng)建不規(guī)則窗體

使用MFC創(chuàng)建不規(guī)則窗體

ID:38693004

大?。?8.50 KB

頁數(shù):6頁

時(shí)間:2019-06-17

使用MFC創(chuàng)建不規(guī)則窗體_第1頁
使用MFC創(chuàng)建不規(guī)則窗體_第2頁
使用MFC創(chuàng)建不規(guī)則窗體_第3頁
使用MFC創(chuàng)建不規(guī)則窗體_第4頁
使用MFC創(chuàng)建不規(guī)則窗體_第5頁
資源描述:

《使用MFC創(chuàng)建不規(guī)則窗體》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、使用C++繪制不規(guī)則的窗體減小字體增大字體作者:不詳??來源:轉(zhuǎn)載??發(fā)布時(shí)間:2010-02-2307:43:00  一、序言  在絕大多數(shù)的Windows應(yīng)用程序中,其窗體都是使用的正規(guī)正矩的矩形窗體,例如我們常用的,“記事本”,“掃雷”,等等。矩形窗體,具有編程實(shí)現(xiàn)簡單,風(fēng)格簡潔的優(yōu)點(diǎn),所以在普通文檔應(yīng)用程序和簡單小游戲中使用足矣。但在某些娛樂游戲程序中使用就略顯呆板些了,這時(shí)若用不規(guī)則窗體替代原先的矩形窗體,將會使這類程序更添情趣。典型的例子有windows自代的MediaPlayer,新版本的MediaPlayer有個(gè)控制面

2、板的選項(xiàng),選中這些面板,播放器就以選中的面板形狀出現(xiàn),這時(shí)的播放器比以前版本的MediaPlayer的古老矩形界面要生動有趣的多了。要實(shí)現(xiàn)不規(guī)則窗體不是太難,知道了基本原理后,你也可以創(chuàng)建各種有趣的不規(guī)則窗體。  二、實(shí)現(xiàn)原理  所有的Windows窗體都位于一個(gè)稱為“region”中,窗體的大小如果超出“region”的范圍,windows會自動裁剪超出"region"范圍那部分的窗體,使其不可見。所以,要創(chuàng)建不規(guī)則窗體有兩個(gè)步驟:第一步就是創(chuàng)建不規(guī)則"region".第二步就是將窗體放到創(chuàng)建的“region”中?! ∑渲械诙胶芎?/p>

3、單就調(diào)用一條語句即可。在SDK中調(diào)用API函數(shù)SetWindowRgn,該函數(shù)原型如下:intSetWindowRgn(HWNDhWnd,HRGNhRgn,BOOLbRedraw);  其中hWnd為待設(shè)置的窗體句柄,hRgn為已經(jīng)創(chuàng)建的"region"句柄,bRedraw代表是否要重繪窗體。在MFC中使用窗口類CWnd的成員函數(shù)intCWnd::SetWindowRgn(HRGNhRgn,BOOLbRedraw);該函數(shù)的參數(shù)意義與API中同名函數(shù)相同?! ∠鄬εc第二步,創(chuàng)建不規(guī)則窗體的第一步要復(fù)雜許多,并且不規(guī)則窗體越復(fù)雜,創(chuàng)建其

4、"region"的過程也越復(fù)雜。接下去我們將由淺入深地介紹各種創(chuàng)建”region”的方法。  在MFC中"region"對象,由CRgn類實(shí)現(xiàn)。CRgn的幾乎每個(gè)成員函數(shù)都有同名的SDKAPI函數(shù)對應(yīng)?! ∪?、簡單“region”的創(chuàng)建  類CRgn創(chuàng)建一個(gè)新的"region"的簡單方法有以下幾個(gè)成員函數(shù):BOOLCRgn::CreateRectRgn(intx1,inty1,intx2,inty2);創(chuàng)建矩形的“region”。BOOLCRgn::CreateEllipticRgn(intx1,inty1,intx2,inty2);

5、創(chuàng)建圓形或橢圓形“region”。BOOLCRgn::CreateRoundRectRgn(intx1,inty1,intx2,inty2,intx3,inty3);創(chuàng)建圓角矩形“region”。BOOLCRgn::CreatePolygonRgn(LPPOINTlpPoints,intnCount,intnMode);創(chuàng)建多邊形“region”?! ∵@里以創(chuàng)建橢圓窗體為例,介紹橢圓窗體創(chuàng)建的方法。在創(chuàng)建橢圓“region”的CreateEllipticRgn函數(shù)中,x1,y1指橢圓所在矩形的左上角坐標(biāo),x2,y2指該矩形的右下角坐標(biāo)

6、。  下面的代碼加入到MFC對話框程序的OnInitDialog函數(shù)中,可將該對話框變成橢圓窗體:BOOLCTestDlg::OnInitDialog(){CDialog::OnInitDialog();...CRgnrgn;rgn.CreateEllipticRgn(0,0,200,100);SetWindowRgn(rgn,TRUE);}圖一橢圓窗體效果圖  四、作圖路徑法創(chuàng)建”region”  使用該方法創(chuàng)建”region”的過程如下:  第一步繪制所要創(chuàng)建的窗體形狀。   該步驟中使用到CDC類中的一些成員函數(shù)如下:BOOLC

7、DC::BeginPath();  調(diào)用該函數(shù)后當(dāng)前設(shè)備環(huán)境(DC)開始追蹤繪圖的過程。intCDC::SetBkMode(intnBkMode);  設(shè)置繪圖時(shí)的背景模式,此應(yīng)用中nBkMode必須取值為TRANSPARENT。即設(shè)置繪圖時(shí)背景不發(fā)生變化。BOOLCDC::EndPath();  調(diào)用該函數(shù)后當(dāng)前設(shè)備環(huán)境(DC)結(jié)束追蹤繪圖的過程?! ¢_始繪圖前,先調(diào)用BeginPath,然后調(diào)用SetBkMode。接下去就可調(diào)用CDC的其他繪圖函數(shù)作圖,例如Arc,AngleArc,LineTo,MoveTo,RoundRect,

8、,Textout等等。繪圖完畢調(diào)用EndPath().  第二步將繪制的結(jié)果轉(zhuǎn)成”region”.  此步驟中使用SDKAPI函數(shù)HRGNPathToRegion(HDChdc);  Hdc為作圖DC的句柄,CDC類中的

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。