使用 MFC,如何为带有圆角和阴影的 CEdit 控件设置样式?

Posted

技术标签:

【中文标题】使用 MFC,如何为带有圆角和阴影的 CEdit 控件设置样式?【英文标题】:With MFC, how to style a CEdit control with rounded corners and shadow? 【发布时间】: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 控件的样式?

【问题讨论】:

***.com/questions/1955538/… 您必须制作自己的所有者绘制控件才能获得圆润的边缘。或使用CDHtmlDialog。在方形边缘很大的 Windows 8 和 10 中,它不一定看起来很好。 【参考方案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 控件本身似乎都会篡夺绘图,并剪掉底部和右侧的非客户区域 - 不可能程序克服这个问题的方法。也许我错了,但这似乎显然正在发生。

以上是关于使用 MFC,如何为带有圆角和阴影的 CEdit 控件设置样式?的主要内容,如果未能解决你的问题,请参考以下文章

在 MFC 中调整控件大小

如何为带有阴影的 UIView 赋予椭圆形状

如何为tableView部分的第一个和最后一个单元格设置圆角

带有圆角和阴影的 UIView?

带有圆角和阴影的 UIView?

带有圆角和阴影的 UIView?