MFC 改變視窗外形

2021-08-16 03:38:40 字數 1867 閱讀 5757

windows中所有視窗顯示預設為矩形,很多時候我們希望視窗的形狀可以隨意變化。這個時候我們就需要使用mfc的crgn類,

每乙個視窗都有乙個自己的crgn,定義了當前視窗的顯示區域,crgn就好像是在一張上新增了相框,相框的形狀就決定了

視窗的顯示範圍。當然顯示區域之外就屬於其他視窗。

一,多邊形視窗

[cpp]view plain

copy

crect rc;   

getwindowrect(&rc); //獲取視窗矩形(大小)

cpoint ptvertex[4]; //多邊形頂點陣列,形狀為平行四邊形

ptvertex[0].x = 0 ;    

ptvertex[0].y = rc.height();  

ptvertex[1].x = rc.width()/2;  

ptvertex[1].y = rc.height();  

ptvertex[2].x = rc.width();  

ptvertex[2].y =0;  

ptvertex[3].x = rc.width()/2;  

ptvertex[3].y = 0;  

crgn m_rgn;   //定義視窗顯示區域

m_rgn.createpolygonrgn(ptvertex,4,alternate);//根據頂點陣列建立視窗的顯示區域

setwindowrgn(m_rgn,true);//新增到當前視窗

**直接放在oninitdialog()方法裡,修改頂點就可以了,其中第乙個點和最後乙個點會自動連線。

二,根據定義視窗

[cpp]view plain

copy

colorref

transcolor=rgb(255,255,255);

//白色為不顯示的部分

cbitmap cbitmap;  

cbitmap.loadbitmap(idb_bitmap_crgn);//載入描述視窗形狀的bmp

cdc* pdc=this

->getdc();  

cdc memdc;//為什麼要建立,是不是可以直接設定當前控制項的crgn

memdc.createcompatibledc(pdc);//建立與傳入dc相容的臨時dc

cbitmap *poldmembmp=null;  

poldmembmp=memdc.selectobject(&cbitmap);//將位圖選入臨時dc,方便對在控制項環境中進行操作

static

crgn wndrgn;  

wndrgn.createrectrgn(0,0,0,0);//建立總的窗體區域,初始region為0

bitmap bit;  

cbitmap.getbitmap (&bit);//取得位圖引數,這裡要用到位圖的長和寬

inty;  

crgn rgntemp; //儲存臨時region

for(y=0;y<=bit.bmheight ;y++)  

while

(ix}  

this

->setwindowrgn(wndrgn,true);  

memdc.deletedc();  

**直接放在oninitdialog()方法裡,修改要載入的就可以了,可以是24位也可以是32位。

我的:

程式視窗:

MFC之修改視窗外觀

改變視窗實在precreatewindow中進行操作,因為 你需要在建立視窗之前,就要設定視窗的型別 而在fws dototitle這個操作是把doc視窗標題預設成為fram視窗辯題 在視窗建立之後也可以修改視窗屬性 oncreate 中 setwindowlong hwnd,int,long 第乙...

MFC修改應用程式視窗外觀

1.視窗建立之前修改 bool cmainframe precreatewindow createstruct cs 執行結果 2.視窗建立之後修改 int cmainframe oncreate lpcreatestruct lpcreatestruct 執行結果 3.字串資源idr mainfr...

MFC 改變視窗類名

mfc 改變視窗類名 1,改變視窗類名 比如 myclassname是自己想設定的類名 方法 開啟資源檢視,右擊外掛程式視窗,屬性改掉classname屬性,若它為灰色,右擊.rc檔案改mfc mode屬性為false,再改 2,改變後在ctestcpp中的initinstance 註冊該視窗類名 ...