MFC界面白屏

weixin_38882698 2019-01-14 03:24:52
。。在一个子对话框的全屏界面多次刷新调用onpaint函数,结果不仅子对话框白屏,其他的对话框也出现白屏情况。跪求各位大神帮帮我。
...全文
1291 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
b43ok 2019-02-19
  • 打赏
  • 举报
回复
典型的GDI泄露问题,检查一下各种画界面的句柄有没有释放
DeleteObject、ReleaseDC、DeleteDC
C++实习生 2019-02-19
  • 打赏
  • 举报
回复
检查windowproc的返回值。默认的消息被屏蔽了吗?
zh359780498 2019-02-18
  • 打赏
  • 举报
回复
那么多LoadBitmaps ,但是没看到在哪里释放,应该是GDI一直在创建,未释放。Windows程序一个进程中GDI上限好像是9999吧,到这这个数界面就没法显示了
CT8100 2019-02-12
  • 打赏
  • 举报
回复
CPaintDC dc(this);

这个dc需要释放吧
cqzj70 2019-02-08
  • 打赏
  • 举报
回复
WM_ERASEBKEGND
牧童吃五谷 2019-01-30
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
OnPaint 中 GDI 句柄泄漏 ?


应该是这个问题吧!你自己通过任务管理器“详细信息”中把"GDI对象“这一列显示出来,如果达到9999就是问题了
還是 2019-01-30
  • 打赏
  • 举报
回复
只留一个控件,其他全删掉。再调试看看
零隐 2019-01-30
  • 打赏
  • 举报
回复
你可以看下onsize函数,因为你对话框不但变白而且布局也变了。还有除了redawwindow,估计其他地方用了另一种刷新。
likfeng 2019-01-30
  • 打赏
  • 举报
回复
最后加上CDialogEx::OnPaint();试试
赵4老师 2019-01-24
  • 打赏
  • 举报
回复
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!


搜“GDI泄露检测”
shen_wei 2019-01-22
  • 打赏
  • 举报
回复
m_addzerobutton.LoadBitmaps(IDB_zidongjialingdown);

图片加载放到初始化中。。。避免每次刷新都加载!!!
zgl7903 2019-01-14
  • 打赏
  • 举报
回复
把 CPaintDC dc(this) 后面的代码屏蔽了 还会出现白屏么?

schlafenhamster 2019-01-14
  • 打赏
  • 举报
回复
1 所有 .LoadBitmaps 放 初始化中
2 习惯用redrawWindow来更新界面 ,坏习惯 ! 用 Invalidate() !
weixin_38882698 2019-01-14
  • 打赏
  • 举报
回复
void CMhsuper::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
// CDC* pdc = pwnd->GetDC();
float iWidth = GetSystemMetrics(SM_CXSCREEN);
float iHeight = GetSystemMetrics(SM_CYSCREEN);
float biwidht = iWidth / 1920;
float biheight = iHeight / 1080;

//CBrush hBrush = CreateSolidBrush(RGB(206, 217, 237));
CBrush brush2(RGB(206, 217, 237));
CRect rect(0, 80* biheight, 2000, 2000); //
dc.FillRect(&rect, &brush2);

CBrush brush3(RGB(130, 167, 209));
CRect rect2(0, 0, 2000, 80* biheight); //
dc.FillRect(&rect2, &brush3);

if (m_addzero == 1)
{
m_addzerobutton.LoadBitmaps(IDB_zidongjialingdown);
m_addzerobutton.SizeToContent();
}
else
{
m_addzerobutton.LoadBitmaps(IDB_zidongjialingup);
m_addzerobutton.SizeToContent();
}


if (sendflag == 0)
{
m_phonemodern.LoadBitmaps(IDB_allscrphonemodern);

m_phonemodern.SizeToContent();
}

else

{
m_phonemodern.LoadBitmaps(IDB_allscrguhuamodern);

m_phonemodern.SizeToContent();
}

m_nextpagetwo.LoadBitmaps(IDB_nextpageup, AFX_IDS_FONT_PPG);
m_nextpagetwo.SizeToContent();

m_lastpagetwo.LoadBitmaps(IDB_shangyiyeupup, IDB_shangyiyedown);
m_lastpagetwo.SizeToContent();




m_dianhuamodern.LoadBitmaps(IDB_guhuamoshi2up, IDB_guhuamoderndown);
m_dianhuamodern.SizeToContent();

m_add0modern.LoadBitmaps(IDB_guhuaadd0up, IDB_guhuaADD0odown);
m_add0modern.SizeToContent();

m_qunfa.LoadBitmaps(IDB_zaiciqunfaup, IDB_zaiciqunfadown);
m_qunfa.SizeToContent();

m_allmsg.LoadBitmaps(IDB_allmsgup, IDB_suoyouduanxindown);
m_allmsg.SizeToContent();
brush2.DeleteObject();
brush3.DeleteObject();


}

这是有问题的界面的onpaint函数
schlafenhamster 2019-01-14
  • 打赏
  • 举报
回复
OnPaint 中 GDI 句柄泄漏 ?
weixin_38882698 2019-01-14
  • 打赏
  • 举报
回复
各种更新控件显示的方法我都试过了,我刚做MFC两个月,有些细节的地方不是很明白。。我整个工程中都习惯用redrawWindow来更新界面。还有另一个全屏的界面就没问题,也不存在白屏的情况。
weixin_38882698 2019-01-14
  • 打赏
  • 举报
回复
一开始不白屏,
这是全屏的对话框。我一直alt+tab 切换界面也会导致这种白屏的问题,一旦这个界面出现白屏,主界面也加载不出来了
schlafenhamster 2019-01-14
  • 打赏
  • 举报
回复
对话框白屏 ?
一开始 白屏 不 ? 多久后 白屏 ?
worldy 2019-01-14
  • 打赏
  • 举报
回复
不要直接调用OnPaint,OnPaint只能在WM_PAINT事件里调用
weixin_38882698 2019-01-14
  • 打赏
  • 举报
回复

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧