C++ WM_NCCALCSIZE 未发送

Jos*_*osh 2 c++ windows api edit subclass

我试图将编辑控件中的文本垂直居中,经过一些研究后我发现我必须处理 WM_NCCALCSIZE 消息。因此,我对编辑控件进行了子类化,但从未发送 WM_NCCALCSIZE 消息。

难道我做错了什么?

编辑:

所以我正在WM_NCCALCSIZE很好地处理消息,并且我有一个通过传递WS_EX_CLIENTEDGE到创建的 3d 边框CreateWindowEx。但是,如果我通过终止主题服务来禁用 Windows 主题,则处理消息的控件上的边框就会消失WM_NCCALCSIZE。另一个不处理WM_NCCALCSIZE消息的控件仍然像平常一样具有边框。

所以我假设我应该做一些事情来WM_NCCALCSIZE让我保持边界?如果是这样怎么办?如果没有办法恢复边界吗?

Jos*_*osh 5

想通了,WM_NCCALCSIZE在编辑控件被子类化之前发送。
所以我必须对EDIT班级进行超级分类。

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

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