Dreamweaver 的顏色選擇器令人印象深刻,特別是能直接取得螢幕任意點顏色的功能。筆者依此概念封裝 CColorPicker 類別實現同類功能,並修正了 Dreamweaver 將螢幕取色進行近似處理的缺點。本文詳細說明使用方法並提供完整範例專案。

CButton,可像一般按鈕同樣使用BN_CLICKED 事件通知父視窗ColorPickerDemo 對話框型 MFC 專案ColorPicker.h、ColorPicker.cpp 複製至專案目錄並加入專案IDC_BUTTON1 的按鈕Owner drawCColorPickerDemoDlg 類別為 IDC_BUTTON1 添加 Control 型成員變數 m_btnColor1ColorPickerDemoDlg.h 中將 CButton m_btnColor1; 改為 CColorPicker m_btnColor1;#include "ColorPicker.h"按鈕的 BN_CLICKED 單擊事件已轉為顏色改變事件。添加處理函數如同一般按鈕單擊處理:
void CColorPickerDemoDlg::OnButton1() {
COLORREF m_clrBKColor = m_btnColor1.GetColor();
CString strColor;
m_btnColor1.GetColor(strColor); // 取得 #FFFFFF 格式字串
}
提供兩種取色方式:
COLORREF GetColor():回傳 COLORREF 型別色彩值void GetColor(CString& strColor):直接取得 #FFFFFF 格式字串若需自動將選取顏色寫入特定視窗(如編輯框),可呼叫:
void CColorPicker::SetBuddy(HWND hWnd)
此功能在自動設定編輯框文字時極為實用。