WINAPI 带有自定义边框的编辑控件

2024-04-16

在纯 WinAPI(无 MFC)中实现编辑控件的自定义圆形边框的正确方法是什么?我需要像这样的边框编辑:

我应该子类化编辑控件并在 WM_NCPAINT 或类似的东西中进行自定义绘画吗?


我想你有两个选择:

  • 正如你所说,你可以子类化并覆盖WM_NCPAINT等提供您自己的非客户区
  • 或者,您可以简单地关闭编辑控件上的边框样式,并让父窗口负责绘制框架。

使用选项#1,您需要覆盖WM_NCCALCSIZE使编辑控件的非客户区变大(即使客户区变小),然后WM_NCPAINT渲染您的自定义框架。您可能还需要处理WM_NCHITTEST。当然,您需要使控件本身的物理尺寸更大,以适应额外的框架厚度。

这取决于您的应用程序设计以及您希望使用多少个这样的控件,但如果是我,我会选择选项 #2。修改系统控件的标准绘图行为通常并不像您想象的那么容易,其中许多控件都有数十年积累的缺陷和兼容性修复程序。

如果您确定WS_BORDER and WS_EX_CLIENTEDGE样式未在编辑控件上设置,它将没有自己的可见边框。然后你所要做的就是有父窗口,在处理时WM_PAINT,在其周围画出框架。确保您设置了WS_CLIPCHILDREN父窗口上的样式,以便您的自定义绘图不会覆盖编辑控件。

任何一条路最终都可能有效,所以这取决于你走哪条路。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WINAPI 带有自定义边框的编辑控件 的相关文章

随机推荐