使用 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
有什么好处吗? OnNcPaint
(ON_WM_NCPAINT
处理程序)直接对应于CEdit
,而不是CBCGPEdit
。仅从CBCGPEdit
的 API 来看,我没有看到优势 - 也许能够使用自定义 CBCGPVisualManager
?谢谢。
...我的第二个问题 - 我实际上只是测试了它,而且看起来 NC 区域确实很小。你碰巧知道如何扩展它吗?
不!您必须放大窗口,而不是放大 NC 区域。文本必须仍然合适。我没有看到任何使用 CBCGEdit 的 adnavntag eto,除了它具有数百万个功能;)只需更改 NC 区域就可以使用任何编辑控件完成。
不幸的是,此解决方案似乎不起作用,因为无论您做什么,EDIT 控件本身似乎都会篡夺绘图,并剪掉底部和右侧的非客户区域 - 不可能程序克服这个问题的方法。也许我错了,但这似乎显然正在发生。以上是关于使用 MFC,如何为带有圆角和阴影的 CEdit 控件设置样式?的主要内容,如果未能解决你的问题,请参考以下文章