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

VC++ 自繪顏色組合框 CBSColorComboBox:Word 風格下拉顏色選擇器完整實作

     編輯:關於VC++

參考 Word 顏色下拉選單風格,實作繼承自 CComboBox 的 CBSColorComboBox,每個下拉項目顯示顏色色塊與名稱,支援「更多顏色」自訂選擇,完整處理 WM_MEASUREITEM/WM_DRAWITEM/WM_PAINT/WM_ERASEBKGND 實現無閃爍自繪。

自繪核心流程

  1. WM_MEASUREITEM:設定項目高度為系統小圖示高度 2 倍(::GetSystemMetrics(SM_CYSMICON) * 2)。
  2. WM_DRAWITEM:取得 LPDRAWITEMSTRUCT,從 hDC、rcItem 繪製:
    • 計算色塊矩形、文字矩形區域。
    • CDC::FillSolidRect 繪製色塊,DrawText 繪製名稱。
    • 依 itemState(選取/停用/焦點)調整文字/背景色、繪製邊框/焦點矩形。
  3. WM_PAINT:將客戶區視為整體位圖更新,避免分區重繪閃爍。
  4. WM_ERASEBKGND:回傳 TRUE 抑制預設背景擦除,配合 WM_PAINT 全區更新消除閃爍。

關鍵實作細節

  • 項目資料結構包含 COLORREF、名稱字串、是否為「更多顏色」旗標。
  • 繪製前先以 FillRect 清除舊項目區域,再繪製新項目。
  • 「更多顏色」項目固定置於清單末尾,點選時彈出 CColorDialog 讓使用者自訂顏色。
  • 標準 MFC 菜單/列表/按鈕自繪流程通用:MEASUREITEM 定尺寸 → DRAWITEM 畫內容 → PAINT 整體更新。

使用方式

  1. 專案新增 CBSColorComboBox 類別(繼承 CComboBox)。
  2. 對話框編輯器放入 ComboBox,設定 Owner Draw Fixed、Has Strings、Vertical Scroll。
  3. 變數關聯為 CBSColorComboBox 型別,初始化時呼叫自訂 InitColors() 填入預設顏色陣列。

範例程式展示下拉選單顏色色塊與名稱完美對齊、選取態高亮、停用灰階、「更多顏色」彈出標準顏色對話框,視覺效果媲美 Office 套件。

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