读书人

return FALSE; 后对话框就变白色了解

发布时间: 2013-01-23 10:44:49 作者: rapoo

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";

读书人网 >VC/MFC

热点推荐