vc界面刷新问题

onelove2009 2011-11-16 08:52:19
最近写一个应用程序,对采集的数据进行实时波形显示,偶尔要弹出对话框进行配置,但是弹出对话框经常显示不完整(某个控件没有刷新,还是原来背景),这时如果动动鼠标,然后就显示正常了,应该是刷新没有做好,请教如何做全局更新呢?不能每次都动鼠标啊。。。
...全文
723 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
独上西楼 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]

问题还是没有解决。。。
[/Quote]
楼主问题解决了吗?俺也有这个问题...望赐教
youngyang525 2011-12-14
  • 打赏
  • 举报
回复
UpdateWindow
onelove2009 2011-11-29
  • 打赏
  • 举报
回复
问题还是没有解决。。。
0o小猪o0 2011-11-23
  • 打赏
  • 举报
回复
你在onpaint 最后面 加上CDialog::OnPaint();咯
xingfeng2510 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 onelove2009 的回复:]

还是没人回答啊。。。invalid什么的都尝试了,不行啊,应该都是更新了主界面,但是现在的问题是新弹出一个对话框,上面的编辑框什么的显示不完全,一定要动一下鼠标才能正常显示。。。
[/Quote]
我想可能不是界面不及时刷新的问题,可能是存在某些比较耗时的函数调用,导致界面冻结。对话框显示的时候的一般流程是遍历所有的子空间,逐一调用其show操作,很少存在会显示不全的现象,可能是重定义了对话框中某个控件的某个方法,导致上述的遍历显示过程暂时中断。
onelove2009 2011-11-23
  • 打赏
  • 举报
回复
难道要把OnBtnEx()放到OnPaint()中处理?
onelove2009 2011-11-23
  • 打赏
  • 举报
回复
在view类中调用OnBtnEx()函数,然后界面没有刷新。。。
case IDD_COLLECT_SETDLG:
if (m_pCollect_SetDlg->m_nActiveEditID==IDC_EDIT_NFILTER)
{
m_pCollect_SetDlg->OnBtnEx(1);
}
break;
onelove2009 2011-11-23
  • 打赏
  • 举报
回复
void CCollect_SetDlg::OnPaint() 
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here

m_ctrlNFilter.SetFocus(); //对话框初始化时光标位置
m_ctrlNFilter.SetSel(0,m_ctrlNFilter.GetWindowTextLength());
// Do not call CDialog::OnPaint() for painting messages
}

void CCollect_SetDlg::OnBtnEx(UINT num)
{
if (1==m_nBtnPage) //没有翻页2-5 为了与之前的应用程序相融合nNFilter从0开始
{
switch (num)
{
case 1:
m_nNFilter=2; //2阶
break;
case 2:
m_nNFilter=3; //3阶
break;
case 3:
m_nNFilter=4; //4阶
break;
case 4:
m_nNFilter=5; //5阶
break;

default:
break;
}
}
else if(2==m_nBtnPage){ //翻页
switch (num)
{
case 1:
m_nNFilter=6; //6阶
break;
case 2:
m_nNFilter=7; //7阶
break;
case 3:
m_nNFilter=8; //8阶
break;
default:
break;
}
}
else if(3==m_nBtnPage){ //翻页
switch (num)
{
case 1:
m_nNFilter=9; //9阶
break;
case 2:
m_nNFilter=10; //10阶
break;

default:
break;
}
}
UpdateData(FALSE);
m_ctrlNFilter.SetSel(0,m_ctrlNFilter.GetWindowTextLength());
}
0o小猪o0 2011-11-23
  • 打赏
  • 举报
回复
把你的onpaint函数 拿出来 看下吧 光看 看不出结果的
onelove2009 2011-11-23
  • 打赏
  • 举报
回复
还是没人回答啊。。。invalid什么的都尝试了,不行啊,应该都是更新了主界面,但是现在的问题是新弹出一个对话框,上面的编辑框什么的显示不完全,一定要动一下鼠标才能正常显示。。。
xingfeng2510 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 onelove2009 的回复:]

好像也不是CButtonEx类的问题,创建了一个不用这个类的对话框,依然存在这个问题,由于程序中需要不断接收并处理串口信息,所以比较耗时。。。
但是为什么动一动鼠标就能够显示完整了呢。。。
[/Quote]
不知LZ是不是添加了自定义的鼠标移动事件处理函数OnMouseMove,问题有可能出在这个函数里面,仅仅是猜测。
onelove2009 2011-11-23
  • 打赏
  • 举报
回复
刚刚试了一下,木有用啊。。。。。。
[Quote=引用 15 楼 huangxvhui88 的回复:]

C/C++ code

void CCollect_SetDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here

m_ctrlNFilter.SetFocus(); //对话框……
[/Quote]
boluomianbao 2011-11-23
  • 打赏
  • 举报
回复
对话框的用RedrawWindow()看看哦~
我曾遇到过类似问题,但是关于工具栏图标切换的,就是这样改ok的,lz可以试试嘛
0o小猪o0 2011-11-23
  • 打赏
  • 举报
回复

void CCollect_SetDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here

m_ctrlNFilter.SetFocus(); //对话框初始化时光标位置
m_ctrlNFilter.SetSel(0,m_ctrlNFilter.GetWindowTextLength());
CDialog::OnPaint();//你试过这样没
}
onelove2009 2011-11-23
  • 打赏
  • 举报
回复
好像也不是CButtonEx类的问题,创建了一个不用这个类的对话框,依然存在这个问题,由于程序中需要不断接收并处理串口信息,所以比较耗时。。。
但是为什么动一动鼠标就能够显示完整了呢。。。
onelove2009 2011-11-23
  • 打赏
  • 举报
回复
这个有道理。。。我的对话框中用了很多button,是我自定义的一个继承了BUTTON的buttonex类,难道跟这个有关系?如何改进呢?
[Quote=引用 11 楼 xingfeng2510 的回复:]

引用 6 楼 onelove2009 的回复:

还是没人回答啊。。。invalid什么的都尝试了,不行啊,应该都是更新了主界面,但是现在的问题是新弹出一个对话框,上面的编辑框什么的显示不完全,一定要动一下鼠标才能正常显示。。。

我想可能不是界面不及时刷新的问题,可能是存在某些比较耗时的函数调用,导致界面冻结。对话框显示的时候的一般流程是遍历所有的子空间,逐一调用其show操作,很少存……
[/Quote]
onelove2009 2011-11-22
  • 打赏
  • 举报
回复
Invalidate是刷新view界面吧?新弹出的对话框界面如何刷新呢?
linyongzuo 2011-11-17
  • 打赏
  • 举报
回复
InvalidateRect() 刷新你才说的鼠标过去才刷新的区域
onelove2009 2011-11-16
  • 打赏
  • 举报
回复
试过了,没用啊。。。
请问Invalidate()应该放在哪呢?

[Quote=引用 1 楼 demon__hunter 的回复:]
baidu:
Invalidate()
[/Quote]
机智的呆呆 2011-11-16
  • 打赏
  • 举报
回复
baidu:
Invalidate()

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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