【问题标题】:Multiple fonts in C++ dialogC++ 对话框中的多种字体
【发布时间】:2015-06-29 13:43:14
【问题描述】:

在 C++ 中有没有一种简单的方法(如果有,怎么做,最好在 Visual Studio VS2012 中)设置不同的字体属性(大小、类型、粗体等)对于一个对话框窗口的不同元素(按钮、静态文本、标题等)?

对话框窗口的字体属性可以在 VS2012 的“属性”对话框中修改,但它们随后会应用于所有窗口元素。

我需要在同一个窗口中强调一些其他信息,例如以便在视觉上更容易区分标签和变量值,以及静态变量和可修改变量。

感谢您的帮助。

【问题讨论】:

  • 当涉及到对话框(或任何 UI 控件)时,没有简单的方法可以在 C++ 中做任何事情。换句话说,你将不得不编写代码,因为 VS C++ 设计器很垃圾——我的意思是非常糟糕——而且 VS 仍在使用 30 年前发明的同样完全糟糕的编译资源系统。
  • 您似乎证实了我对这个问题的担忧。以编程方式实现目标的任何简单方法(链接?)?
  • 对于很多控件,你会做一些事情,比如向它发送 WM_SETFONT 消息,将句柄传递给你在某个地方创建的字体对象。如果您使用的是 MFC,它可能有一个字体属性(尽管这可能要求太多,因为它是 1982 年的微软)。
  • 嗯,MSVC++ 为 Winforms 提供了 13 年的出色点击式设计支持,为 XAML 提供了 3 年的出色的点击式设计支持。但是附加了字符串,因此更容易抱怨它们不存在。编写代码。

标签: c++ visual-studio-2012 fonts dialog font-size


【解决方案1】:

在最近写得很好的article 中,John Morrison Leon 提出了他的解决方案,该解决方案准确地解决了这个问题等等。

除了通过格式化实现所希望的可能性之外,它还提供了一种全新的方式来轻松创建和使用纯 C++ 的对话框窗口(Win32 没有 MFC 或 ATL/WPL,独立于 IDE,在编译而不是运行时映射时间)。

这篇文章是一个相当详细的教程,在代码项目开放许可证 (CPOL) 下获得许可。它包含所有 C++ 源代码 (37.2kB zip) 和示例 (80+kB)。它获得了 2015 年 5 月最佳 C++ 文章(一等奖)。

-------------从这篇(长)文章中引用的一些摘录------------------------

另一种方法,其中对话框完全指定为 C++ 代码,既不需要编写 IDE 支持,也不需要执行 IDE 生成的资源。由 C++ 类型系统提供支持。

与此处介绍的方法的根本区别在于,您的代码完成了创建对话框的所有工作,而不是让 Windows 从对话框模板资源创建对话框,然后将代码附加到该资源。不需要对话框或控件 ID,因为没有代码到对话框模板的运行时映射。取而代之的是每个控件到 C++ 变量的编译时映射。此外,这些变量中的每一个都有自己独特的数据类型。如此丰富的打字可能是激进的,但它带来了许多好处,并且是设计的关键。它允许 C++ 语言通过类型解析在编译时解决许多问题,这减少并简化了您必须编写的代码。在实践中,这意味着对于表示控件的每个变量,例如 btnCancel,将生成一个唯一的数据类型,其名称相同,前缀为下划线 _btnCancel。正如您将看到的,有时您需要通过以下方式引用控件它的数据类型是 _btnCancel 而不是它的变量名 btnCancel。

下一节将讨论对布局进行编码而不是拖放的不熟悉之处,之后,大多数事情可能比您习惯的更简单、更干净、更简洁。

还有一些其他创新,包括:

•所有控制变量都带有一个动态文本动态文本缓冲区as_text,通过它可以读取和写入控件窗口文本,并且在对话框关闭时仍然存在。

•支持仅绘制在对话框上并响应鼠标事件的非 Windows 控件。 (在某些情况下提供了示例,这更有意义)。

•支持在应用程序级别对所有托管的对话框施加美学指标(按钮大小、间距、颜色、控件样式等)。

•用 Expand_X 和 Expand_Y 样式替换“锚点”的概念,以便在扩大对话框窗口时受益于扩大的控件。

• 使用控件对 Win 32 编程进行了适度但有效的简化。

【讨论】:

  • 这里不欢迎仅链接的答案。您至少应该概述该技术。
  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • 很难总结这种全新的解决方案。此外,用 -1 满足我的回答肯定不会诱使我再次尝试积极协作。我明白,作为一个新手,系统可能会阻止我做进一步的贡献。
  • 这是一种糟糕的对话框设计方式。真的很糟糕,这就是为什么 1995 年的主题甚至有图形用户界面生成器。
猜你喜欢
  • 2011-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
相关资源
最近更新 更多