WinAPI:ChooseFont 和 CFHookProc

一、ChooseFont
    函数功能:该函数创建一个使用户选择逻辑字体属性的对话框,这些属性包括字体名称、字体风格(如粗体、斜体或正常体)、字号、效果(如强调线,下划线或字体颜色)和手写体(或字符集)。

    函数原型:BOOL ChooseFont(LPCHOOSEFONT Ipcf);

    参数:

    Ipcf:指向一个含有初始化对话框信息的CHOOSEFONT结构。当返回ChooseFont函数时,此结构含有用户对字体选择的信息。

    返回值:如果用户点击对话框的OK按钮,返回值为非零值,CHOOSEFONT结构中的成员表明用户的选择。如果用户取消或关闭Font对话框或出现错误信息,返回值为零。


二、CFHookProc

    函数功能:该挂钩函数是一个应用程序定义的或库定义的回调函数,此回调函数与ChooseFont函数一起使用。挂钩函数接收用于Font公共对话框的缺省对话框函数的消息和通告。

    LPCFHOOKPROC类型定义了一个指向这种回调函数的指针。CFHOOKProc是一个由应用程序定义的函数名的位置占有者。

    函数原型:UINT CALLBACK CFHookProc(HWND hdlg,UINT uiMsg,WPARAM wParam,LPARAM IParam);

    参数:

    hdlg:指向消息所指的Font对话框窗口的句柄。

    uiMsg:指定存放的消息。

    wParam:指定有关消息的其他信息。精确的意义根据uiMsg参数的值来决定。

    IParam:指定有关消息的其他信息。精确的意义根据uiMSg参数的值来决定。如果uiMsg参数表明WM_INITDIALOG消息,则IParam是一个指向CHOOSEFONT结构的指针,该结构含有创建公共对话框时指定的值。

    返回值:如果挂钩函数返回零值,缺省对话框函数处理消息。如果挂钩函数返回一个非零值,缺省对话框函数忽略消息。


三、样例:

UINT_PTR CALLBACK  ChooseFontHook (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:
			{
				CHOOSEFONT cf = {sizeof(CHOOSEFONT)};
				cf.Flags =CF_EFFECTS|CF_INITTOLOGFONTSTRUCT |CF_ENABLEHOOK;
				//cf.lpLogFont = &m_LogFont;   字体样式
				cf.rgbColors  = RGB(0xFF,0,0);
				cf.hwndOwner  = hWnd;
				cf.lpfnHook = ChooseFontHook;
				if (ChooseFont(&cf) == 0) {
					MessageBox(hWnd, TEXT("关闭或者取消选择窗口"),TEXT("提示"),MB_OK);
				}
			}
			
			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;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值