MFC点击属性页确定按钮后,屏蔽窗口自动刷新问题。
2013-05-17 23:08
267 查看
环境:VS2010
任务:修改一个属性页对话框。
操作:双击一个对象,弹出一个属性页对话框,点击确定按钮,在OnOK函数里面,设置对象的一些属性,并把这个视图刷新一遍。
描述:
这个OnOk相应函数是别人已经写好的,我把OnOK函数里面的Invalidate()和updateWindow()函数删除掉,因为我在外面也需要修改对象的一些属性,可以一起绘制,避免产生闪烁。
应该没什么问题吧,可是问题来了。
当我点击确定按钮后,我原本以为不会产生OnPaint消息,但是确实产生了,还没有执行到代码4初,就已经产出了OnPaint消息,仔细一看,是RedrawWindow()函数引起的,这个函数是MFC内部调用的。
想了一会后,有了一个办法。
这样应该没有问题了吧!确实是解决问题了,可以新的问题又来了,悲剧了,移动属性页对话框也不能重绘窗口,界面简直惨不忍睹啊。后来我跟踪了一下,RedrawWindow()函数是在身什么时候调用的,他在OnOK函数执行完之后,在CMyDialog的析构函数执行之前,我们可以这样做。m_pView是成员变量,不能通过GetParent()获得视图对象,因为在执行CMyDialog的析构函数时,得到的指针为NULL,我们可以存储一个成员变量。
总结:
不应该在对话框的响应函数里面直接修改对象,应该在相应函数里面存储这些属性到成员变量中,执行DoMode后,从CMyDialog中取出这些属性,最后设置到对象中。
任务:修改一个属性页对话框。
操作:双击一个对象,弹出一个属性页对话框,点击确定按钮,在OnOK函数里面,设置对象的一些属性,并把这个视图刷新一遍。
描述:
这个OnOk相应函数是别人已经写好的,我把OnOK函数里面的Invalidate()和updateWindow()函数删除掉,因为我在外面也需要修改对象的一些属性,可以一起绘制,避免产生闪烁。
CDialog dlg; if (dlg.DoMode() == IDOK) { pObj->SetColor(RGB(0, 0, 255)) CView *pView = GetActiveView(); pView->Invalidate(); pView->UpdateWindow(); }
应该没什么问题吧,可是问题来了。
当我点击确定按钮后,我原本以为不会产生OnPaint消息,但是确实产生了,还没有执行到代码4初,就已经产出了OnPaint消息,仔细一看,是RedrawWindow()函数引起的,这个函数是MFC内部调用的。
想了一会后,有了一个办法。
CView *pView = GetActiveView(); CMyDialog dlg; pView->SendMessage(WM_SETREDRAW, 1, 0);//禁止视图重绘 if (dlg.DoMode() == IDOK) { pView->SendMessage(WM_SETREDRAW, 0, 0);//开启视图重绘 pObj->SetColor(RGB(0, 0, 255)) //一起绘制 pView->Invalidate(); pView->UpdateWindow(); }
这样应该没有问题了吧!确实是解决问题了,可以新的问题又来了,悲剧了,移动属性页对话框也不能重绘窗口,界面简直惨不忍睹啊。后来我跟踪了一下,RedrawWindow()函数是在身什么时候调用的,他在OnOK函数执行完之后,在CMyDialog的析构函数执行之前,我们可以这样做。m_pView是成员变量,不能通过GetParent()获得视图对象,因为在执行CMyDialog的析构函数时,得到的指针为NULL,我们可以存储一个成员变量。
CMyDialog::OnOK() { m_pView->SendMessage(WM_SETREDRAW, 1, 0);//禁止视图重绘 } CMyDialog::~OnOK() { m_pView->SendMessage(WM_SETREDRAW, 0, 0);//开启视图重绘 }
总结:
不应该在对话框的响应函数里面直接修改对象,应该在相应函数里面存储这些属性到成员变量中,执行DoMode后,从CMyDialog中取出这些属性,最后设置到对象中。
相关文章推荐
- 局部刷新 与 点击按钮弹出窗口 (ajax 控件 updatepanel ModalPopupExtender ) 今天怎么老出问题呢
- layui点击按钮自动刷新页面问题
- 关于点击按钮后页面自动刷新的问题
- VS2010 使用时选择代码或双击时出错,点击窗口按钮后VS自动重启问题
- Directshow 通过 put_Owner 指定显示窗口后,自动刷新问题
- Directshow 通过 put_Owner 指定显示窗口后,自动刷新问题
- 局部刷新 与 点击按钮弹出窗口 (ajax 控件 updatepanel ModalPopupExtender )
- HTML/Javascript: 点击按钮页面刷新问题
- .NET中用弹出窗口添加或修改一个页面,当添加或修改相关内容后按下提交按钮自动刷新页面的JS代码
- 很奇怪的问题。点击button会自动刷新页面?
- QT的一个奇怪问题,设置了Qt::Tool后,点击弹出对话框的确定取消按钮,程序直接退出。
- DatePicker 控件在5.0以上版本 焦点释放问题 手动输入点击确定按钮不能正确获取到日期优化
- 如何点击按钮弹出新窗口,输入数据后返回并刷新页面?
- form表单底下的button按钮点击自动提交恶心问题的解决
- 如何点击按钮弹出新窗口,输入数据后返回并刷新页面?(转自孟子E章)
- 如何点击按钮弹出新窗口,输入数据后返回并刷新页面?(C#代码)
- 点击按钮后表单自动提交的问题
- 如何点击按钮提交表单后刷新上级窗口
- eWebEditor弹出窗口不能完整显示确定按钮问题
- (MFC)关于点击窗口1的button弹出对话框2,关闭对话框2,需要点击两次对话框1的button才能弹出对话框2的问题