对话框背景无法重绘

时间:2022-12-16 14:36:42
我在一个单文档程序中加了一个登陆用的对话框,去掉了边框 在Onpaint里加载了一幅位图作为背景图,在win7下一切都正常,但是在xp下 或者在win7下换个主题后 就是出现问题了:
当切换到其他程序的窗口后,再切换回来时 这个对话框的背景没有能重绘出来 而是一片空白,只能看见上面的控件了!
请问下谁知道这个是怎么回事吗?

9 个解决方案

#1


不同的Windows版本指不定出啥状况。
切换后强制刷新一下试试?

#2


没有设置为子窗口刷新。类似的,设置了WS_CLIPCHILDREN  这个属性,将不会为子控件和子窗口刷新。

#3


所以,你需要通过自行刷新子窗口。

#4


引用 2 楼 bojie5744 的回复:
没有设置为子窗口刷新。类似的,设置了WS_CLIPCHILDREN  这个属性,将不会为子控件和子窗口刷新。
对话框背景无法重绘

#5



引用 3 楼 bojie5744 的回复:
所以,你需要通过自行刷新子窗口。


我是在App里 DoModal出来的 怎么设置 自行刷新子窗口?

CWinApp::InitInstance()
{

.....
CDlgLogin dlg;
if(dlg.DoModal() != IDOK)
return FALSE;

.....
}

#6


引用 5 楼 yumulinxiang 的回复:
Quote: 引用 3 楼 bojie5744 的回复:

所以,你需要通过自行刷新子窗口。


我是在App里 DoModal出来的 怎么设置 自行刷新子窗口?

CWinApp::InitInstance()
{

.....
CDlgLogin dlg;
if(dlg.DoModal() != IDOK)
return FALSE;

.....
}


当你切换时,单文档程序框架必然会出发重新绘制。在这个时候,强制子窗口刷新。

#7


切换时 Invalidate 一下。

#8


引用 7 楼 gordon3000 的回复:
切换时 Invalidate 一下。

应加到哪里呢?

#9


估计 OnPaint 这个函数里处理提有问题  

#1


不同的Windows版本指不定出啥状况。
切换后强制刷新一下试试?

#2


没有设置为子窗口刷新。类似的,设置了WS_CLIPCHILDREN  这个属性,将不会为子控件和子窗口刷新。

#3


所以,你需要通过自行刷新子窗口。

#4


引用 2 楼 bojie5744 的回复:
没有设置为子窗口刷新。类似的,设置了WS_CLIPCHILDREN  这个属性,将不会为子控件和子窗口刷新。
对话框背景无法重绘

#5



引用 3 楼 bojie5744 的回复:
所以,你需要通过自行刷新子窗口。


我是在App里 DoModal出来的 怎么设置 自行刷新子窗口?

CWinApp::InitInstance()
{

.....
CDlgLogin dlg;
if(dlg.DoModal() != IDOK)
return FALSE;

.....
}

#6


引用 5 楼 yumulinxiang 的回复:
Quote: 引用 3 楼 bojie5744 的回复:

所以,你需要通过自行刷新子窗口。


我是在App里 DoModal出来的 怎么设置 自行刷新子窗口?

CWinApp::InitInstance()
{

.....
CDlgLogin dlg;
if(dlg.DoModal() != IDOK)
return FALSE;

.....
}


当你切换时,单文档程序框架必然会出发重新绘制。在这个时候,强制子窗口刷新。

#7


切换时 Invalidate 一下。

#8


引用 7 楼 gordon3000 的回复:
切换时 Invalidate 一下。

应加到哪里呢?

#9


估计 OnPaint 这个函数里处理提有问题