首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

return FALSE; 后,对话框就变白色了解决方案

2013-01-23 
return FALSE 后,对话框就变白色了BOOL CddDlg::OnEraseBkgnd(CDC* pDC){// TODO: 在此添加消息处理程序

return FALSE; 后,对话框就变白色了
return FALSE; 后,对话框就变白色了解决方案



BOOL CddDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

//return CDialog::OnEraseBkgnd(pDC);

return FALSE;
}



对话框背景默认是灰色的, 无论return true, false,  都会造成对话框背景变白色。

什么原因导致的?

不要回答这个函数的返回值, 我知道返回值的意思, 无非就是防止onpain再次擦出背景,仅此而已。

但是也不会无故地是使 背景变白色吧。

原本是灰色的


[解决办法]

引用:
我比较倾向这个解释,
保持不变,不修改onpaitn的代码,无论返回true, false。 倒不会影响界面的,不会导致花屏。

虽然msdn说过,如果返回false,  onpaint会去擦出 窗口背景。 返回true,则不会擦出.

但是似乎并没有把贴的图片给擦掉。


"花屏" 就是因为你没画背景,你贴了图片填充了整个对话框,自然就不会"花屏" 

msdn不是说返回false, onpaint会去擦出窗口背景,只是说PAINTSTRUCT的fErase会标记为TRUE
BeginPaint会根据fErase是否为TRUE来决定是否发WM_ERASEBKGND消息,所以还是会调用OnEraseBkgnd的
OnEraseBkgnd直接返回TRUE或FALSE都没擦出背景,所以会"花屏" ;OnEraseBkgnd贴了图片填充了整个对话框就相当于擦出了背景,所以不会"花屏"







[解决办法]
“不知道是不是自己人品问题还是机子问题,  OnEraseBkgnd打了断点, 故意拖拉对话框,或者用其他窗口来遮挡改对话框,  无论 OnEraseBkgnd返回什么,  OnEraseBkgnd都会被调用。”

“OnEraseBkgnd不能 打断点”的,因为 调试 窗口 会 引起 不断的重绘。
应该:
afxDump << "OnEraseBkgnd\n";

热点排行