我程序最大化时候出现了一个不知道如何避免的情况。
当最大化的时候,程序接收了WM_NCCALCSIZE消息,我对其设置了多边形窗口的客户区大小,然后重新计算并合并出整个窗口区域,并用SetWindowRgn来把它设置到窗口上,这是出现一个问题,无论redraw是T还是F,程序执行SetWindowRgn后马上又重新进入WM_NCCALCSIZE消息,这样历尽数十次循环才不知道什么原因才退出的,但是窗口大小在循环中已经被错误计算了。请问如何解决?
------解决方案--------------------------------------------------------
建议转到vc++版
------解决方案--------------------------------------------------------
WM_SIZE, 也只是在主窗口大小改变时调整子控件的大小和位置这么用过, 没有什么特别的感受
------解决方案--------------------------------------------------------
解决了,在WM_GETMINMAXINFO里面得不到改变中窗口的大小,所以还是回到我原先的办法里,虽然问题解决了,但是还是感觉这个办法不好。
我的办法是,窗口大小改变,肯定要重新setWindowRgn,这个时候就会触发WM_NCCALCSIZE消息,而我又恰恰是在WM_NCCALCSIZE这个消息里使用的setWindowRgn,所以导致40多次的循环(我认为怎么也应该是一个无限死循环,不知道为什么每次在40多次后停下了。。。)然后就加了一个判断条件,setWindowRgn的时候虽然触发WM_NCCALCSIZE消息,但是通过判断条件不让这个消息做任何事情,所以就默默地结束后回到之前的正常处理。
不知道有人听明白了不。。。
我个人认为这不是一个正确的办法,因为我没有在windows正常消息顺序里处理多边形窗口的绘制。如果有人精于绘制多边形窗口的话,请指教,谢谢。