首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Windows GDI 矩形操作全解析:RECT 結構、繪圖函數與常用工具函數

     編輯:關於C語言

Windows GDI 提供豐富的矩形操作 API,核心結構 RECT(左、上、右、下)配合繪圖、幾何計算函數,構成界面繪製、碰撞檢測、區域裁剪的基礎。本文系統整理 RECT 相關 API。

1. RECT 結構

typedef struct tagRECT {
    LONG left;   // 最小 x
    LONG top;    // 最小 y
    LONG right;  // 最大 x
    LONG bottom; // 最大 y
} RECT, *PRECT, *LPRECT;

坐標為邏輯坐標,寬度 = right - left,高度 = bottom - top。

2. 繪圖函數(需 HDC 與 RECT*)

函數用途特點
FillRect(hdc, &rect, hbr)用畫刷填充矩形無需先選入畫刷,邊界不繪製
FrameRect(hdc, &rect, hbr)用畫刷繪製矩形邊框邊框寬 1 邏輯單位,支持花紋畫刷
InvertRect(hdc, &rect)顏色反轉(黑↔白、綠↔洋紅)像素級 XOR,常用於選中高亮

3. 矩形初始化與幾何工具函數

函數原型說明
SetRectBOOL SetRect(LPRECT lprc, int xLeft, int yTop, int xRight, int yBottom)一次性設置四個座標
OffsetRectBOOL OffsetRect(LPRECT lprc, int dx, int dy)整體平移(左/右/上/下同增減)
InflateRectBOOL InflateRect(LPRECT lprc, int dx, int dy)擴大/縮小:左-=dx, 右+=dx, 上-=dy, 下+=dy
SetRectEmptyBOOL SetRectEmpty(LPRECT lprc)置零(left=top=right=bottom=0)
CopyRectBOOL CopyRect(LPRECT lprcDst, CONST RECT* lprcSrc)結構體拷貝
IntersectRectBOOL IntersectRect(LPRECT lprcDst, CONST RECT* lprc1, CONST RECT* lprc2)求交集(無交集返回 FALSE,Dst 置空)
UnionRectBOOL UnionRect(LPRECT lprcDst, CONST RECT* lprc1, CONST RECT* lprc2)求並集(外接矩形)
IsRectEmptyBOOL IsRectEmpty(CONST RECT* lprc)判斷寬或高 ≤ 0
PtInRectBOOL PtInRect(CONST RECT* lprc, POINT pt)點是否在矩形內(含左上邊,不含右下邊)

4. 使用示例

RECT rc = {10, 10, 100, 80};
HBRUSH hbr = CreateSolidBrush(RGB(0, 128, 255));

FillRect(hdc, &rc, hbr);           // 填充藍色矩形
FrameRect(hdc, &rc, GetStockObject(BLACK_BRUSH)); // 黑框

InflateRect(&rc, 5, 5);            // 向外擴張 5 像素
OffsetRect(&rc, 20, 0);            // 右移 20

POINT pt = {50, 50};
if (PtInRect(&rc, pt)) { /* 命中 */ }

5. 區域 Region 進階

矩形是區域的基本構建塊。CreateRectRgn/CreateRectRgnIndirect 創建矩形區域,CombineRgn(RGN_OR/AND/XOR/DIFF)進行布爾運算,構建任意多邊形、橢圓組合區域,用於不規則窗口、裁剪路徑、命中測試。

6. 注意事項

  • RECT 坐標包含關係:left ≤ x < right,top ≤ y < bottom(右下邊不屬於矩形內部)。
  • 所有函數返回 BOOL,失敗返回 0,調用前務必檢查指針有效性。
  • 高 DPI 環境下邏輯坐標與物理像素存在縮放,需配合 GetDpiForWindow/SetProcessDpiAwareness 處理。

熟練掌握 RECT API,是 Windows 桌面開發、遊戲碰撞檢測、自定義控件繪製的基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved