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

GDI 區域:多邊形建立、點擊測試與裁剪區域應用

     編輯:關於C語言

MFC 中 `CRgn` 封裝了 Windows GDI 區域物件,支援矩形、橢圓、多邊形等任意形狀。區域不直接選入 DC,但可用於點擊測試、區域合併、裁剪輸出等操作。善用裁剪區域可大幅提升重繪效率——僅重繪失效區域而非整個視窗。

CRgn 常用成員函數

函數用途
CreateRectRgn由矩形建立區域
CreateEllipticRgn由橢圓建立區域
CreatePolygonRgn由多點構成多邊形區域
PtInRegion測試點是否在區域內
CombineRgn合併兩區域(聯集、交集、差集、XOR)
EqualRgn比較兩區域是否相等
GetRgnBox取得包含區域的最小外接矩形

裁剪區域與重繪優化

當視窗部分區域失效(如被遮擋視窗移動),Windows 標記該區域為「更新區域」。呼叫 `CDC::GetClipBox(LPRECT)` 可取得包含更新區域的最小矩形,繪圖時僅處理此矩形範圍即可。

void CMyView::OnDraw(CDC* pDC) {
    CRect clipBox;
    pDC->GetClipBox(&clipBox);  // 取得需重繪的邊界矩形
    // 僅在 clipBox 範圍內進行繪圖運算與輸出
    // ...
}

若需精確區域,可用 `::GetClipRgn(hdc, hrgn)` 取得真實區域句柄,但通常矩形近似已足夠且效能更好。

實務建議

  • 區域物件用完需 `DeleteObject()` 釋放 GDI 資源
  • 複雜區域操作(如大量 `CombineRgn`)可能較耗時,權衡精度與效能
  • 列印/預覽時 DC 映射模式不同,區域座標需對應邏輯單位
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved