本節內容介紹了有關矩形和對這個矩形的一系列操作。
一個矩形其實就是一個RECT的結構
這個結構就包含如下圖所示的1,2點的x和y座標:
一般情況下通過這個代碼所示範的方式進行設定:
rect.top = xTop ;
rect.right = xRight ;
rect.bottom = xBottom ;
不過呢,這樣很麻煩,下面一些函數有助於使用這個結構:
---------------------------------------------------------------其他的函數------------------------------------------------------------------
將矩形沿x軸和y軸移動幾個單元
*/
BOOL OffsetRect(
LPRECT lprc, // rectangle
int dx, // horizontal offset
int dy // vertical offset
);
InflateRect函數用於增加或減小矩形的高度或者寬度。其中dx會增加左右方向的大小,dy會增加上下方向的大小,而且dx和dy會受到符號的限制,如果他們爲負,那麼將會減小這個矩形。
*/
BOOL InflateRect(
LPRECT lprc, // rectangle
int dx, // amount to adjust width
int dy // amount to adjust height
);
SetRectEmpty函數用於將任何的矩形的座標大小設置爲0
*/
BOOL SetRectEmpty(
LPRECT lprc // rectangle
);
CopyRect函數用於將一個矩形複製到另外一個
*/
BOOL CopyRect(
LPRECT lprcDst, // destination rectangle
CONST RECT* lprcSrc // source rectangle
);
這個也可以簡單的通過DestRect = SrcRect ;來簡單的實現
取得兩個矩形的交集
*/
BOOL IntersectRect(
LPRECT lprcDst, // intersection buffer
CONST RECT *lprcSrc1, // first rectangle
CONST RECT *lprcSrc2 // second rectangle
);
取得兩個矩形的聯集,一個聯集就是一個包含了兩個矩形的最小矩形。
*/
BOOL UnionRect(
LPRECT lprcDst, // destination rectangle
CONST RECT *lprcSrc1, // first rectangle
CONST RECT *lprcSrc2 // second rectangle
);
PtInRect函數用於判斷點是否在一個矩形裏面,注意,如果一個點在矩形的左邊或者上邊上,那麼點就在矩形中,而如果在下邊或者右邊就認爲不在矩形裏面。
*/
BOOL PtInRect(
CONST RECT *lprc, // rectangle
POINT pt // point
);
然後就是教你怎麼使用PeekMessage函數拉。不過好久沒有動手了。。。錯另一個很白喫地方,建議認真看看書,都很重要!那個畫真的很快。。。。亂七八糟的看得,因爲沒有辦法解圖了,自己運行一下看吧。
http://dl2.csdn.net/down4/20070724/24231357954.rar
下面就是裁減區域的介紹,裁減區域我的理解就是像PS裏面那個選區,你可以對選區進行操作。選區保存HRGN這個句柄中。在與畫筆、畫刷和位圖一樣,剪裁區域是GDI對象,您應該呼叫DeleteObject來刪除您所建立的剪裁區域。這部分內容可以參照ms-help://MS.MSDNQTR.2003FEB.2052/gdi/regions_7ab7.htm
最簡單的剪裁區域是矩形,有兩種建立矩形的方法:
或者
您也可以建立橢圓剪裁區域:
或者
CreateRoundRectRgn建立圓角的矩形剪裁區域。
建立多邊形剪裁區域的函數類似於Polygon函數:
操作兩個剪裁:
你可以通過設定iCombine來設定怎麼操作:
iCombine值 | 新剪裁區域 |
RGN_AND | 兩個剪裁區域的公共部分 |
RGN_OR | 兩個剪裁區域的全部 |
RGN_XOR | 兩個剪裁區域的全部除去公共部分 |
RGN_DIFF | hSrcRgn1不在hSrcRgn2中的部分 |
RGN_COPY | hSrcRgn1的全部(忽略hSrcRgn2) |
從CombineRgn傳回的iRgnType值是下列之一:NULLREGION,表示得到一個空剪裁區域;SIMPLEREGION,
表示得到一個簡單的矩形、橢圓或者多邊形;COMPLEXREGION,表示多個矩形、橢圓或多邊形的組合;ERROR,
表示出錯了。
在您用完一個區域後,可以像刪除其它GDI對象那樣刪除它:
嗯,你和我一樣,發現這個似乎沒有什麼用。。。其實,我發現矩形比裁減還要沒有用,裁減的(書商告訴了我的)唯一用處就是:
可以設定可以被繪畫的區域,通過將剪裁選入設備內容句柄,就可以限制畫畫的範圍了。函數是這個樣子的:
後面是一個例子,有時間就動動手吧~~