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