Pocket PC 字体选择对话框实现

Pocket PC设备上实现一个字体选择对话框是一个常见的需求,尤其是在需要用户自定义文本显示样式的应用程序中。本文将介绍如何创建一个具有ClearType支持的字体选择对话框,并展示其实现过程。

对话框功能特点

字体选择对话框具备以下特点:

对话框的布局基于Pocket Excel,允许在SIP(软键盘)弹出时使用。

实现过程

对话框作为一个属性页实现,可以轻松集成到自己的属性页中。示例项目使用了自定义的CCePropertySheet类来封装它。

该类使用两个公共成员与用户进行交互:

  • m_logFont:一个LOGFONT变量,用于接收和返回字体定义。可以直接在CreateFontIndirect中使用。
  • m_strPreview:一个CString变量,用于接收希望在预览中渲染的文本。默认值是"AaBbCcXxYyZz"。

通过调用EnumFontFamilies函数枚举字体族。此函数接收一个回调函数指针,该指针将填充字体组合框。当对话框初始化时,它会尝试将m_logFont中指定的字体与组合框中的内容匹配。如果无法匹配字体名称和大小,对话框将设置适当的组合框中的名称和大小。对话框不准备接收一个干净的m_logFont,在使用对话框之前,必须填写它。

ClearType支持取决于系统是否支持它。请检查设备供应商,以确定设备是否支持ClearType。

创建具有ClearType属性的字体非常简单,只需将LOGFONT结构的lfQuality成员指定为5即可。

使用对话框

使用对话框非常简单:

void CChildView::OnChooseFont() { CCePropertySheet sheet(_T("Choose Font")); CChooseFontPage page; // 创建默认字体 page.m_logFont.lfHeight = -11; page.m_logFont.lfWidth = 0; page.m_logFont.lfEscapement = 0; page.m_logFont.lfOrientation = 0; page.m_logFont.lfWeight = FW_NORMAL; page.m_logFont.lfItalic = FALSE; page.m_logFont.lfUnderline = FALSE; page.m_logFont.lfStrikeOut = 0; page.m_logFont.lfCharSet = ANSI_CHARSET; page.m_logFont.lfOutPrecision = OUT_DEFAULT_PRECIS; page.m_logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS; page.m_logFont.lfQuality = DEFAULT_QUALITY; page.m_logFont.lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS; _tcscpy(page.m_logFont.lfFaceName, TEXT("Tahoma")); sheet.AddPage(&page); sheet.DoModal(); }

退出时,m_logFont变量将包含新的字体定义,准备使用。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485