父窗口在onpaint中设定背景图片,并且在一个图片控件中嵌入了子窗口,在父窗口被重绘时,发现子窗口消失了,原因是被父窗口的背景和控件所覆盖
我尝试在onpaint函数最后,强制子窗口重绘语句
//设置无效区(意味着需要重绘),产生VM_PAINT到消息队列
m_buttonDlg1.Invalidate();
//直接发送VM_PAINT消息,立即重绘无效区域
m_buttonDlg1.UpdateWindow();
但是这会导致无限循环产生VM_PAINT消息
正确办法是设置父窗口属性
SetWindowLong(this->m_hWnd, GWL_STYLE,WS_CLIPCHILDREN);
WS_CLIPCHILDREN
其含义就是,父窗口不对子窗口区域进行绘制。默认情况下父窗口会对子窗口背景是进行绘制的,但是如果父窗口设置了WS_CLIPCHILDREN属性,父亲窗口不在对子窗口背景绘制
也可以在父窗口属性界面直接设置