【问题标题】:With MFC, how to style a CEdit control with rounded corners and shadow?使用 MFC,如何为带有圆角和阴影的 CEdit 控件设置样式?
【发布时间】:2016-07-26 14:42:55
【问题描述】:

我想在 MFC 应用程序中为客户端提供高度样式化的表单元素。

我得出的结论是,如果没有主要的自定义绘画/编程工作,'Web-2.0' 风格的小部件在 MFC 世界中根本不可能

我包含了要比较的屏幕截图:

  • 所需的“Web 2.0”风格的编辑小部件,并且
  • “最佳”编辑小部件 在 MFC 世界中直接可用

示例 A: 这是一个(随机选择的)样式精美的编辑小部件的屏幕截图,它是使用 HTML/CSS 的网络编程世界中的easily available and trivial to use

示例 B: 相比之下,这里是从BCGSoft's MFC library's 示例应用程序之一截取的屏幕截图。这个示例应用程序名为“Edit Box Demo”,并提供 - 似乎 - MFC 领域中可用的最佳编辑小部件

您可以看到,易于使用的 HTML 编辑小部件与似乎最适用于 Windows 桌面应用程序的 MFC/C++ 小部件之间存在“一代差异”。

因此我的问题很简单:如何在 MFC 中设置带有圆角和阴影的 CEdit 控件的样式?

【问题讨论】:

  • 您必须制作自己的所有者绘制控件才能获得圆润的边缘。或使用CDHtmlDialog。在方形边缘很大的 Windows 8 和 10 中,它不一定看起来很好。

标签: c++ visual-c++ mfc widget


【解决方案1】:

只是将您指向您使用的示例 B

使用CBCGPEdit 覆盖OnNcPaint 应该简单直接。

但是!通常您可以指示 BCG 使用可视化管理器,在这种情况下,可视化管理器将负责绘制控件框架。如果视觉管理器被设计为这样做的话,它会使用圆角...我知道甚至没有使用圆角的视觉管理器;) (CBCGPVisualManager::OnDrawControlBorder)

但请随意编写自己的。

【讨论】:

  • 谢谢!关于如何增加 NC 区域大小的任何快速建议......这将产生添加填充的效果,如果这是一个现实的解决方案,这一点很重要。当然,我希望任何增加的非客户区的大小都能轻松地显示在屏幕上,而不会被系统任何层的任何剪裁区域剪裁。
  • 再次感谢 - 还有几个问题 - 你认为使用 CBCGPEdit 比直接使用 CEdit 有什么好处吗? OnNcPaintON_WM_NCPAINT 处理程序)直接对应于CEdit,而不是CBCGPEdit。仅从CBCGPEdit 的 API 来看,我没有看到优势 - 也许能够使用自定义 CBCGPVisualManager?谢谢。
  • ...我的第二个问题 - 我实际上只是测试了它,而且看起来 NC 区域确实很小。你碰巧知道如何扩展它吗?
  • 不!您必须放大窗口,而不是放大 NC 区域。文本必须仍然合适。我没有看到任何使用 CBCGEdit 的 adnavntag eto,除了它具有数百万个功能;)只需更改 NC 区域就可以使用任何编辑控件完成。
  • 不幸的是,此解决方案似乎不起作用,因为无论您做什么,EDIT 控件本身似乎都会篡夺绘图,并剪掉底部和右侧的非客户区域 - 不可能程序克服这个问题的方法。也许我错了,但这似乎显然正在发生。
猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多