(1) 参数
typedef struct {
DWORD lStructSize;
HWND hwndOwner;
HWND hInstance;
COLORREF rgbResult;
COLORREF * lpCustColors;
DWORD Flags;
LPARAM lCustData;
LPCCHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} CHOOSECOLOR, *LPCHOOSECOLOR;
(2) API函数
BOOL ChooseColor(
LPCHOOSECOLOR lpcc // initialization data
);
(3) 回调函数,用于处理消息
UINT_PTR CALLBACK CCHookProc(
HWND hdlg, // handle to dialog box
UINT uiMsg, // message identifier
WPARAM wParam, // message parameter
LPARAM lParam // message parameter
);
方法:
(1)、填写结构体:
COLORREF retColor = RGB( 255,0,0);
COLORREF cusColor[16];
memset( cusColor, 0, sizeof( COLORREF) * 16 ); CHOOSECOLOR cc = {
sizeof( CHOOSECOLOR ),
m_hwndParent, // 父窗口啦,设置为NULL的话,就是桌面了
NULL, // 一个句柄,没用到,详看MSDN
retColor, // 如果设置了CC_RGBINIT 就是初始的颜色值了,同时它作为返回值,返回所选择的颜色
cusColor, // 初始的自定义颜色数组,设置为NULL的话,会出错,不设置的话,好像就是随机值了,我把它都清理成0了
CC_RGBINIT|CC_FULLOPEN | CC_ENABLEHOOK | CC_ANYCOLOR, // 红色为设置自己的消息处理函数
NULL,
(LPCCHOOKPROC)MyCCHookProc, // 使用自定义的消息处理函数
NULL
};
(2)、调用
ChooseColor( &cc ); // 点击"确定"返回 TRUE, 否则返回 FALSE