WinAPI:ChooseColor 和 CFHookProc

一、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;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值