vc++中提供了crgn類和setwindowrgn函式來建立別具一格的視窗。建立乙個新視窗首先要定義乙個crgn物件,並用各種初始化函式建立crgn類的區域,然後呼叫cwnd::
setwindowrgn函式建立不規則視窗。
crgn類是從cgdiobject類派生二來的子類,crgn類用來確定乙個多邊形、橢圓形或由多邊形和橢圓合成的圖形範圍。crgn類有三個比較常用的成員函式。
1、createrectrgnindirect
該函式用來建立乙個矩形區域,原型為:
createrectrgnindirect(lpcrect lprect);
引數lprect用來指定待建立的矩形區域在視窗客戶區中的座標。
2、createellipticrgnindirect函式
該函式用來建立乙個橢圓區域,原型為:
createellipticrgnindirect(lpcrect lprect);
引數lprect用來指定待建立的橢圓區域在視窗客戶區中的座標。如果引數lprect的right座標和left座標的差等於button座標與top座標的差,那麼所建立的區域為乙個圓形區域。
3、createpolygonrgn函式
該函式用來建立乙個多邊形區域,原型為:
createpolygonrgn(lppoint lppoints, int ncount, int nmode);
引數lppoints為乙個指向point結構的陣列指標。在point結構陣列中,每個point結構項用來確定多邊形頂點在視窗使用者區中的座標。引數ncount用於指定point結構陣列中結構項的數目,也就是多邊形的頂點數。而nmode用於指定多邊形的填充方式,通常取值為alternate。下面一段**用於建立乙個三角形區域:
crect rcdialog;
getclientrect(rcdialog);
points[0].x = rcdialog.width()/2;
points[0].y = 0;
points[1].x = rcdialog.width();
points[1].y = rcdialog.height();
points[2].x = 0;
points[2].y = rcdialog.height();
m_rgn.createpolygonrgn(points,3,alternate);
::setwindowrgn(getsafehwnd(),(hrgn)m_rgn,true);
利用上述語句建立了乙個區域之後,接下來就可以呼叫cwnd::setwindowrgn函式來建立視窗了。該函式原型為:
cwnd::setwindowrgn(hrgn hrgn, bool bredraw);
其中引數hrgn為乙個已經建立的crgn類的控制代碼;引數bredraw如果設定為true,則在視窗次序發生變化時,系統向視窗傳送wm_windowposchanging和wm_windowposchanged訊息用於重繪視窗。
如果要建立更複雜的視窗,則可以通過combinergn函式把幾個非矩形區域結合起來,該函式原型為:
combinergn(crgn* prgn1,crgn* prgn2, int ncombinemode);
其中,引數prgn1和prgn2分別指向參與合成的不規則區域;引數ncombinemode用於指定結合的方式:
* rgn_and :表示最後形成的區域是prgn1和prgn2的重疊部分;
* rgn_diff :表示最後形成的區域是prgn1中不包含prgn2的部分;
* rgn_or :表示最後形成的區域同時包含prgn1和prgn2;
* rgn_xor :表示最後形成的區域同時包含prgn1和prgn2,但不包含重疊部分。
如何設定不規則視窗GTK
為了體現高度的可制定性.對於gtk來說,肯定可以實現不規則的視窗.但是如何實現呢?在網上找到了一些資料.主要是用透明的來實現的.下面我們來分析一下實現的過程.pixbuf gdk pixbuf new from file 1.png null gdk pixbuf render pixmap and...
MFC不規則視窗
直接在onpaint 函式裡新增語句 setwindowlong m hwnd,gwl exstyle,getwindowlong m hwnd,gwl exstyle ws ex layered setlayeredwindowattributes rgb 255,255,255 0,lwa co...
3 不規則視窗
1.不規則視窗 原理 用乙個位圖畫刷繪製視窗背景,然後把想要透明的顏色設定為透明色,就可以使視窗變成任意形狀。1 視窗處理函式 2lresult callback bitmapwindowproc hwnd hwnd,uint message,wparam wparam,lparam lparam ...