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

C++Builder 不規則視窗快速顯示:區域建立與 SetWindowRgn 完整實作

     編輯:VC 教學

視覺效果

打破方正視窗,實現橢圓、多邊形、圓角矩形、任意組合形狀視窗,提升軟體吸引力 (如超級解霸皮膚)。

核心 API

函式用途
CreateEllipticRgn橢圓/圓形區域
CreatePolygonRgn多邊形區域
CreateRectRgn矩形區域
CreateRoundRectRgn圓角矩形區域
CombineRgn區域布林運算 (AND/OR/XOR/DIFF)
SetWindowRgn將區域套用至視窗,決定可見/點擊範圍

製作流程

  1. 準備圖片:Photoshop 磁性套索抠圖 → 白底 → 存 PSD → ACDSee 轉 BMP (`face.bmp`)。
  2. 載入圖片:`TImage` 載入 `face.bmp`,`Form` 設 `BorderStyle=bsNone`、`Color=clBtnFace`。
  3. 建立區域:依圖形輪廓組合基本區域 (如人臉輪廓用多邊形近似)。
  4. 套用區域:`FormCreate` 中呼叫 `SetWindowRgn(Handle, hRgn, TRUE)`。

代碼範例 (簡化)


HRGN hRgn = CreatePolygonRgn(points, nPoints, ALTERNATE);
// 或組合多個基本區域
// HRGN hRgn1 = CreateEllipticRgn(...);
// HRGN hRgn2 = CreateRoundRectRgn(...);
// CombineRgn(hRgn, hRgn1, hRgn2, RGN_OR);

SetWindowRgn(Handle, hRgn, TRUE); // TRUE=重繪
// 之後不得刪除 hRgn,系統會接管

進階技巧

  • 標題列區域單獨處理拖曳 (參考「客戶區拖曳」文章)。
  • 非矩形視窗的 `HitTest` 自訂:`WM_NCHITTEST` 回傳 `HTCAPTION` 允許拖曳區域。
  • 分層視窗 (`WS_EX_LAYERED`) + Alpha 混合實現半透明/漸變邊緣 (Win2K+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved