没有发送WM_NCCALCSIZE

C++ WM_NCCALCSIZE not being sent

本文关键字:NCCALCSIZE WM      更新时间:2023-10-16

我试图在编辑控件中垂直居中文本,经过一些研究,我发现我必须处理WM_NCCALCSIZE消息。所以我已经子类化了我的编辑控件,但WM_NCCALCSIZE消息从未发送。

我做错了什么吗?

编辑:

所以我很好地处理了WM_NCCALCSIZE消息,并且通过将WS_EX_CLIENTEDGE传递给CreateWindowEx创建了一个3d边界。但是,如果我通过杀死主题服务来禁用windows主题,则处理WM_NCCALCSIZE消息的控件上的边界将消失。另一个不处理WM_NCCALCSIZE消息的控件仍然具有正常的边框。

所以我假设我应该在WM_NCCALCSIZE中做一些事情,让我保持边界?如果是,那又怎样呢?如果没有办法夺回边境?

知道了,WM_NCCALCSIZE是在编辑控件子类化之前发送的。
所以我必须超类EDIT类。

编辑:


我刚想到的另一个解决方案是子类化它,然后用SWP_FRAMECHANGED调用SetWindowPos,这导致它发送WM_NCCALCSIZE消息。

如果有人有任何意见,为什么一种方法会比另一种更好,请评论:)

而不是修补WM_NCCALCSIZE(一个非常难以管理的消息),为什么不只是重新定位你的编辑控件垂直,使文本在垂直位置你喜欢?你可以把它放在一个白色的盒子里,在它周围留出空白。或者,您可以使用EM_SETRECT将文本精确地放在您想要的位置。