Windows API一日一練(40)CreateRectRgn和CombineRgn函數
創新是永恒的追求。當大家習慣Windows的介面時,又想自己開發的軟體耳目一新的感覺,那麼就得要改變視窗的形狀,比如心形的視窗,總之是不規則的視窗。這時就需要使用到叫做地區的技術。地區就是把不同的形狀的圖形進行組合,然後可以填充它,或者在它那裡顯示。比如MSN左邊的TAB按鈕,應就是地區的運用就可以實現它了。
函數CreateRectRgn聲明如下:
WINGDIAPI HRGN WINAPI CreateRectRgn( __in int x1, __in int y1, __in int x2, __in int y2);
x1和y1是地區左上方的X軸和Y軸座標。
x2和y2是地區右下角的X軸和Y軸座標。
傳回值是建立的地區。
函數CombineRgn聲明如下:
WINGDIAPI int WINAPI CombineRgn( __in_opt HRGN hrgnDst, __in_opt HRGN hrgnSrc1, __in_opt HRGN hrgnSrc2, __in int iMode);
hrgnDst是組合的地區。
hrgnSrc1是想組合的第一個地區。
hrgnSrc2是想組合的第二個地區。
iMode是地區的組合方式,比如相與,相或,異或等等。
調用這個函數的例子如下:
#001 //
#002 //介面顯示輸出.
#003 //
#004 //蔡軍生 2007/09/19 QQ:9073204 深圳
#005 //
#006 void CCaiWinMsg::OnDraw(HDC hDC)
#007 {
#008 //建立兩個方形地區。
#009 HRGN rgnRect1 = CreateRectRgn(10,10,100,100);
#010 HRGN rgnRect2 = CreateRectRgn(50,50,200,200);
#011
#012 //合并兩個地區。
#013 CombineRgn(rgnRect1,rgnRect1,rgnRect2,RGN_XOR);
#014
#015 //建立畫刷。
#016 HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 0));
#017
#018 //填充地區。
#019 FillRgn(hDC,rgnRect1,hbrush);
#020
#021 //刪除畫刷.
#022 DeleteObject(hbrush);
#023
#024 //刪除建立的兩個地區.
#025 DeleteObject(rgnRect1);
#026 DeleteObject(rgnRect2);
#027
#028 }