我正在尝试将文本垂直放在编辑控件中,经过一些研究后我发现我必须处理WM_NCCALCSIZE消息。 所以我已经对我的编辑控件进行了子类化,但是从不发送WM_NCCALCSIZE消息。
我做错了吗?
修改 的
所以我正在处理WM_NCCALCSIZE
消息,并且通过将WS_EX_CLIENTEDGE
传递给CreateWindowEx
创建了一个3d边框。
但是,如果我通过终止主题服务来禁用Windows主题,则边界会在处理WM_NCCALCSIZE
消息的控件上消失。
另一个不处理WM_NCCALCSIZE
消息的控件仍然具有正常的边框。
所以我假设我应该在WM_NCCALCSIZE
做一些允许我保留边界的东西?如果是这样的话?如果没有办法让边界回来?
答案 0 :(得分:3)
为什么不垂直地重新定位编辑控件以使文本处于您喜欢的垂直位置,而不是修补WM_NCCALCSIZE
(一个非常难以管理的消息)?您可以将它放在白色的盒子里,以提供它周围的空白区域。或者,您可以使用EM_SETRECT
将文本准确地放在所需位置。
答案 1 :(得分:3)
想出来,在编辑控件被子类化之前发送WM_NCCALCSIZE
所以我不得不超级EDIT
类。
修改强>
我刚想到的另一个解决方案是将其子类化,然后使用SetWindowPos
调用SWP_FRAMECHANGED
,这会导致它发送WM_NCCALCSIZE
消息。
如果有人有任何意见为什么一种方法会比另一种方法更好,请评论:)