C++ WM_NCCALCSIZE not being sent

空扰寡人 提交于 2019-12-24 03:21:08

问题


I'm trying to center the text in a edit control vertically, after some research I found I have to process the WM_NCCALCSIZE message. So i've subclassed my edit control, but the WM_NCCALCSIZE message is never sent.

Am I doing something wrong?

EDIT:

So i'm processing the WM_NCCALCSIZE message fine, and I have a 3d border created by passing WS_EX_CLIENTEDGE to CreateWindowEx. But if I disable windows themes by killing the theme service, the border goes away on the control thats processing the WM_NCCALCSIZE message. Another control that doesnt process the WM_NCCALCSIZE message still has the border like normal.

So i'm assuming I'm supposed to be doing somethign in WM_NCCALCSIZE that allows me to keep the border? If so what? if not any way to get the border back?


回答1:


Instead of tinkering with WM_NCCALCSIZE (a very difficult message to manage), why not just reposition your edit control vertically so that the text is at the vertical position you prefer? You can put it inside a white box to provide the white space around it. Alternatively, you can use EM_SETRECT to put the text exactly where you want it.




回答2:


Figured it out, WM_NCCALCSIZE is sent before the edit control is subclassed.
So i had to superclass the EDIT class.

EDIT:
Another solution I just thought of would be to subclass it, then call SetWindowPos with SWP_FRAMECHANGED, this causes it to send the WM_NCCALCSIZE message.

If anyone has any opinions why one method would be better then the other, please comment :)



来源:https://stackoverflow.com/questions/7539711/c-wm-nccalcsize-not-being-sent

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!