下载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