在纯 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(使用前将#替换为@)