一、ChooseColor
函数功能:该函数创建一个能使用户从中选择颜色的通用颜色对话框。
函数原型:BOOL ChooseColor(LPCHOOSECOLOR IpCC);
参数:
lpCC:指向一个包括初始化对话框信息的CHOOSECOLOR结构。当ChooseColor函数返回时,此结构含有有关用户颜色选择的信息。
返回值:如果用户点击对话框中的OK按钮,返回值为非零值。CHOOSECOLOR结构中的rgbResult成员含有用户选择的颜色的RGB颜色值。如果用户取消或关闭Color对话框或错误出现,返回值为零。
二、CFHookProc
函数功能:该挂钩函数是一个应用程序或库定义的回调函数。ChooseColor函数与此函数一起使用挂钩函数贮存信息或通告,此信息和通告应用于Color公共对话框的缺省对话框函数。
LPCEHOOPROC类型定义了一个指向此回调函数的指针。CCHOOkProc是一个应用程序定义的函数名的位置占有者。
函数原型:UINT CALLBACK CCHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM IParam);
参数:
hdlg:指向信息指定的Color对话框的句柄。
uiMag:标识存放的信息。
wParam:指定有关信息号的其他信息。精确意义根据UiMdsg参数的值来决定。
IParam:指定有关消息的其他信息。精确意义由uiMsg参数的值米决定。如果uiMsg多数表明WM_IMTDIALOG消息,IParam是一个指向含有当对话框创建时指定的值的CHOOSECOLOR结构的指针。
返回值;如果挂钩函数返回零值,缺省对话框函数处理消息。如果挂钩函数返回非零值,缺省对话框函数忽略消息。
三、代码
UINT_PTR CALLBACK ChooseColorHook (HWND hWnd, UINT uiMessage, WPARAM wParam, LPARAM lParam)
{
switch(uiMessage)
{
case WM_INITDIALOG:
{
int a = 3;
}
break;
default:
break;
}
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case ID_TEST:
{
COLORREF ccResult = RGB(255, 0, 0);
COLORREF ccCustColor;
CHOOSECOLOR cc = {sizeof(CHOOSECOLOR)};
cc.Flags = CC_RGBINIT | CC_FULLOPEN | CC_ANYCOLOR |CC_ENABLEHOOK;
cc.hwndOwner = hWnd;
cc.rgbResult = ccResult;
cc.lpCustColors = &ccCustColor;
cc.lpfnHook = ChooseColorHook;
::ChooseColor(&cc);
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}