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

介绍 在我参与的一个项目中,我们必须显示字体选择对话框。 我的产品经理对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 FilesMicrosoft 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

原文地址:https://www.cnblogs.com/Dincat/p/13461269.html