C++ 对话框中的多种字体
Multiple fonts in C++ dialog
在 C++ 中是否有一种简单的方法(如果是,如何做,最好在 Visual Studio VS2012 中)设置不同的字体属性(大小,类型、粗体等)对于一个对话框的不同元素window(按钮、静态文本、标题等)?
对话框 window 的字体属性可以在 VS2012 的 'properties' 对话框中修改,但随后它们将应用于所有 window 元素。
我的需要是在同一 window 中强调一些信息,例如在视觉上更容易区分标签和变量值,以及静态变量和可修改变量。
感谢您的帮助。
在最近写得很好的 article 中,John Morrison Leon 提出了他的解决方案,精确地解决了这个问题以及更多问题。
除了通过格式化实现希望的可能性之外,它还提供了一种全新的方式来轻松创建和使用对话框 windows,纯 C++(没有 MFC 的 Win32 或 ATL/WPL,独立于IDE,编译时映射而不是 运行 时)。
该文章是一个相当详细的教程,已获得代码项目开放许可证 (CPOL) 许可。它包含所有 C++ 源代码 (37.2kB zip) 和示例 (80+kB)。获得2015年5月最佳C++文章(一等奖)
------------部分摘自这篇(长篇)文章------------------------
另一种方法,其中对话框完全指定为 C++ 代码,既不需要编写 IDE 支持,也不需要执行 IDE 生成的资源。由 C++ 类型系统提供支持。
与此处介绍的方法的根本区别在于,您的代码完成了创建对话框的所有工作,而不是让 Windows 从对话框模板资源创建对话框,然后将代码附加到该对话框。不需要对话框或控件 ID,因为没有 运行 时间将代码映射到对话框模板。相反,每个控件都有编译时映射到 C++ 变量。此外,这些变量中的每一个都有自己独特的数据类型。这种丰富的类型可能是激进的,但它带来了许多好处并且是设计的关键。它允许 C++ 语言通过类型解析在编译时解决许多问题,这减少并简化了您必须编写的代码。在实践中,这意味着对于表示控件的每个变量,比如 btnCancel,将生成一个唯一的数据类型,其名称相同,前缀为下划线 _btnCancel.As 你会看到,有时你需要引用一个通过其数据类型 _btnCancel 而不是其变量名 btnCancel 进行控制。
编码布局而不是拖放它的不熟悉将在下一节中处理,在那之后,大多数事情都比您可能习惯的更简单、更干净、更简洁。
还有一些其他创新包括:
•所有控件变量都携带一个动态文本动态文本缓冲区as_text,通过它可以读取和写入控件window 文本,并且在对话框关闭时仍然存在。
•支持非windows 控件,这些控件只需绘制到对话框上并响应鼠标事件。 (在某些情况下提供了更有意义的示例)。
•支持在所有托管对话框的应用程序级别上实施美学指标(按钮大小、间距、颜色、控件样式等)。
•将 'Anchors' 的概念替换为 Expand_X 和 Expand_Y 控件样式,如果对话框 window 被放大,则控件可以从放大中获益。
•对带有控件的 Win 32 编程进行了适度但有效的简化。
在 C++ 中是否有一种简单的方法(如果是,如何做,最好在 Visual Studio VS2012 中)设置不同的字体属性(大小,类型、粗体等)对于一个对话框的不同元素window(按钮、静态文本、标题等)?
对话框 window 的字体属性可以在 VS2012 的 'properties' 对话框中修改,但随后它们将应用于所有 window 元素。
我的需要是在同一 window 中强调一些信息,例如在视觉上更容易区分标签和变量值,以及静态变量和可修改变量。
感谢您的帮助。
在最近写得很好的 article 中,John Morrison Leon 提出了他的解决方案,精确地解决了这个问题以及更多问题。
除了通过格式化实现希望的可能性之外,它还提供了一种全新的方式来轻松创建和使用对话框 windows,纯 C++(没有 MFC 的 Win32 或 ATL/WPL,独立于IDE,编译时映射而不是 运行 时)。
该文章是一个相当详细的教程,已获得代码项目开放许可证 (CPOL) 许可。它包含所有 C++ 源代码 (37.2kB zip) 和示例 (80+kB)。获得2015年5月最佳C++文章(一等奖)
------------部分摘自这篇(长篇)文章------------------------
另一种方法,其中对话框完全指定为 C++ 代码,既不需要编写 IDE 支持,也不需要执行 IDE 生成的资源。由 C++ 类型系统提供支持。
与此处介绍的方法的根本区别在于,您的代码完成了创建对话框的所有工作,而不是让 Windows 从对话框模板资源创建对话框,然后将代码附加到该对话框。不需要对话框或控件 ID,因为没有 运行 时间将代码映射到对话框模板。相反,每个控件都有编译时映射到 C++ 变量。此外,这些变量中的每一个都有自己独特的数据类型。这种丰富的类型可能是激进的,但它带来了许多好处并且是设计的关键。它允许 C++ 语言通过类型解析在编译时解决许多问题,这减少并简化了您必须编写的代码。在实践中,这意味着对于表示控件的每个变量,比如 btnCancel,将生成一个唯一的数据类型,其名称相同,前缀为下划线 _btnCancel.As 你会看到,有时你需要引用一个通过其数据类型 _btnCancel 而不是其变量名 btnCancel 进行控制。
编码布局而不是拖放它的不熟悉将在下一节中处理,在那之后,大多数事情都比您可能习惯的更简单、更干净、更简洁。
还有一些其他创新包括:
•所有控件变量都携带一个动态文本动态文本缓冲区as_text,通过它可以读取和写入控件window 文本,并且在对话框关闭时仍然存在。
•支持非windows 控件,这些控件只需绘制到对话框上并响应鼠标事件。 (在某些情况下提供了更有意义的示例)。
•支持在所有托管对话框的应用程序级别上实施美学指标(按钮大小、间距、颜色、控件样式等)。
•将 'Anchors' 的概念替换为 Expand_X 和 Expand_Y 控件样式,如果对话框 window 被放大,则控件可以从放大中获益。
•对带有控件的 Win 32 编程进行了适度但有效的简化。