MFC子窗口以及按钮控件在父窗口重绘后,被父窗口背景图片覆盖的问题

⌚Time: 2022-09-05 14:50:10

👨‍💻Author: Jack Ge

父窗口在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属性,父亲窗口不在对子窗口背景绘制

也可以在父窗口属性界面直接设置