XFontDialog——定制CFontDialog第一部分:添加字体过滤器

下载demo project - 45 Kb

介绍

在我参与的一个项目中,我们必须显示字体选择对话框。
我的产品经理对MFC有一些问题

CFontDialog。
他非常关注通过简化来降低支持成本
用户界面,以消除任何可能混淆
或有误导性。好吧,这个目标很难反驳。
在的情况下

CFontDialog,
他不喜欢所有不必要的控制
为我们的应用程序。这是标准

CFontDialog
看起来像:

我的产品经理不喜欢特效、字体样式和脚本
控制,因为我们
应用程序只使用字体和字体大小值。我开始有点感觉了
我担心(因为我从来没有赢过他一次辩论),
所以我指出,我们可以很容易地消除一些不必要的控制。
我请他明天再来示威。在接下来的一天里,
我试图弄清楚如何删除他不喜欢的控件。我是
只是部分成功,因为

CFontDialog
提供很少的
在其API中方便定制用户界面。
第二天产品经理来了,这是
我给他:

他认为这看起来很蹩脚,我不得不同意。字体风格
combo还在,去掉了效果控制
只在对话框中留下了一个大洞——示例控件
甚至没有调整大小以利用左边的空闲空间。
最后,我能做的最好的是禁用脚本组合。

但我在研究中发现了两件事

首先,你可以使用自己的对话框模板,
基于Font.Dlg中提供的模板;
其次,你可以自己提供一个钩子程序
CFontDialog-derived类。

玩了几天之后

CFontDialog,
我知道可以自定义字体对话框的外观
按照我们想要的方式。这主要涉及到编辑模板
用于标准字体对话框,并移动不需要的控件
在对话框:

我还必须为示例文本创建新的控件,因为
CFontDialog坚持返回文本“AaBbYyZz”时
在字体组合中选择新字体。

要稍微超前一点,这是最后一个对话框:

这比标准字体对话框更紧凑,
但看起来很像
我们的用户不需要学习一个完全不同的UI。
与此同时,它删除了可能令人沮丧的元素
尝试选择(没有明显的效果,因为他们不是
在我们的应用中使用)。另外,
它给了我们一个机会来增加一些特性
可以更好地与我们的应用程序集成。

CXFontDialog特性

下面是新的CXFontDialog中的特性:

除去字体列表和大小列表之外的所有控件

字体过滤器只选择要显示的字体的特定组

等宽字体的视觉指示

用于等宽和符号字体的新api

API来设置标题字体对话框

API来设置示例文本字体对话框

实现注意事项

我所依赖的主要技术信息来源
自定义CFontDialog是MSDN文档上的

CHOOSEFONT结构。
这个结构包含lpfnHook成员,它允许您
设置你的钩子proc,和
lpTemplateName和hInstance
成员,必须对其进行设置,以便加载自定义模板。
MSDN没有告诉你在哪里可以找到默认模板。
vs6。0,我在
C:\Program Files\Microsoft Visual Studio \ VC98 \ \ Font.Dlg。
对于Visual Studio 8和9,它位于平台SDK的中
包括目录。

找到它之后,下一步是设置一个单独的XFontDialog。rc文件,
然后从Font.Dlg中剪切并粘贴模板。要设置XFontDialog.rc,
我使用了我在文章中描述的技术

如何在项目之间共享对话框。

注意,由于没有定义IDD_XFONTDIALOG,
类向导将IDD_XFONTDIALOG视为字符串。
这样做的好处是不存在冲突的可能性
与项目中的任何其他对话框资源id。

现在我可以使用Visual Studio资源编辑器来配置控件
就像我想的那样——将不需要的控件移到一边,并标记为不可见。
我也让样本控制变大,
并将静态控件添加到字体列表的顶部
等宽字体,您将看到等宽字体显示:

然后使用类向导双击生成新的CXFontDialog类
在资源编辑器模板:

我选择CFontDialog
作为基类,并输入CXFontDialog作为新类名:

最后,我可以使用类向导的新类:

您将注意到字体中所有的符号名称。Dlg一直
转换为数字id。这没有关系,因为这些id必须
没有改变,否则CFontDialog将不起作用。
(我在XFontDialog.cpp中为这些id分配了名称
让它更容易使用。)
我已经添加了
CXFontDialog的两个处理程序函数:OnCtlColor()
以及OnShowMonoSpaced(),它从钩子proc中调用
当用户选择一个monospac时ed字体(这是等宽的地方
显示)。我也添加DoModal()函数,
这是指定对话框模板和钩子函数。
的关键功能是钩proc, WM_INITDIALOG
是她的老公知道。这就是字体过滤器应用(如果有的话)。

如何使用

CXFontDialog集成到你的应用程序,您首先需要
添加文件到您的项目:

XFontDialog.cppXFontDialog.hXFontDialog.rcXFontDialogRes.h

注意,XFontDialogRes.h——尽管基本上是空的——是必要的
如果你想在资源编辑器中编辑对话框模板。

您还需要添加XFontDialog。rc项目rc文件——去
视图|资源包括……在底部的列表框,
向下滚动到最后。插入# include & lt;跨类=“代码串”在“XFontDialog.rc”& lt; / span>之前的

endif:

接下来,包括头文件XFontDialog.h
适当的项目文件。
现在,您可以开始使用CXFontDialog。

演示应用程序

XFontDialogTest.exe演示展示了如何使用CXFontDialog:

修订历史

1.1版- 2008年10月7日

改变了monospaced属性决定。
以前我使用这种技术:
隐藏,复制CodebIsMonoSpaced = (tm。tmPitchAndFamily,TMPF_FIXED_PITCH) = = 0;

但是我发现一些等宽字体(如好
Pragmata字体
法布里奇奥Schiavi)没有马克这样的字体。
所以我采取更简单、更可靠的方法的比较
宽度的!”和“W”字符。如果他们是一样的,
这意味着等宽字体。

添加API允许设置示例文本。

放大字体对话框更可见的字体组合。

VS2005添加项目。

1.0版- 2003年6月21日

首次公开发行。

使用

这个软件是释放到公共领域。你可以自由地使用它
任何一种你喜欢的方式,只是你可能不出售这个源代码。如果你修改
或扩展它,请考虑发布新的代码给大家分享。
这个软件提供了“是”,没有表示或暗示的保证。
我接受任何损害或损失不承担任何责任的商业软件
可能的原因。

本文转载于:http://www.diyabc.com/frontweb/news3672.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值