我试图垂直中心文本在编辑控件,经过一些研究,我发现我必须处理WM_NCCALCSIZE消息。 所以我已经subclassed我的编辑控件,但WM_NCCALCSIZE消息不会被发送。
难道我做错了什么?
编辑:
所以我正在处理WM_NCCALCSIZE
消息,我有一个通过传递WS_EX_CLIENTEDGE
到CreateWindowEx
创build的3d边框。 但是,如果我通过杀死主题服务来禁用Windows主题,则边界会在处理WM_NCCALCSIZE
消息的控件上WM_NCCALCSIZE
。 不处理WM_NCCALCSIZE
消息的另一个控件仍具有正常的边框。
所以我假设我应该在WM_NCCALCSIZE
做一些WM_NCCALCSIZE
,让我保持边界? 如果是这样的话? 如果没有办法让边界回来?
而不是修改WM_NCCALCSIZE
(一个非常困难的消息来管理),为什么不只是垂直重新定位你的编辑控件,使文本在你喜欢的垂直位置? 你可以把它放在一个白色的盒子里,以提供它周围的空白空间。 或者,您可以使用EM_SETRECT
将文本恰好放在您想要的位置。
把它编出来, WM_NCCALCSIZE
在编辑控件被分类之前被发送。
所以我不得不超类EDIT
类。
编辑:
我刚想到的另一个解决方案是子类化,然后调用SetWindowPos
与SWP_FRAMECHANGED
,这导致它发送WM_NCCALCSIZE
消息。
如果有人有任何意见,为什么一种方法会比另一种更好,请评论:)