如何刷新一个自己新建的窗口

loop_k 2009-08-05 09:23:24
需要在自己新建的一个类里面不断的刷新这个窗口,这个窗口用于显示采集到的图像,这个新建窗口函数是从网上找的,在dialog旁边开个窗口。运行程序后,选择相应按钮启动这个窗口,实时的采集图像。但需要不断的刷新这个窗口,咋个操作啊。。
PS:不知道我表达清楚没有。。
...全文
110 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
副组长 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 loop_k 的回复:]
引用 7 楼 gordon3000 的回复:
在OnPaint()里面绘图,当窗口遮挡、缩放等发生时能自动被动刷新。
内部数据发生了变化需要更行图像时用Invalidate(FALSE)函数,主动刷新。

我这个程序就是内部数据发生变化,然后去更新。
我要在程序采集的类里面去实现刷新。用Invalidate(FALSE)好像不行
[/Quote]

在程序采集的类里面获取窗口句柄,然后刷新,一样的。
loop_k 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 biweilun 的回复:]
数据不发生变化,就不刷新?
你的数据变化频率高吗?
可以再平时锁定刷新,到了需要刷新的时候才刷新
[/Quote]
因为要采集图像 每次采集的图像不一样 就要更新一次 10多帧的样子
loop_k 2009-08-06
  • 打赏
  • 举报
回复
开始写了个测试程序在DOC里面用

//
// Reset the view.
//
POSITION pos = GetFirstViewPosition();
while( pos != NULL )
{
CFlyCaptureSdiView* pView = (CFlyCaptureSdiView*)GetNextView( pos );

InvalidateRect( pView->GetSafeHwnd(), NULL, FALSE );
}



区别是这个只有一个窗口,没有出现闪烁 ,显示正常。
biweilun 2009-08-06
  • 打赏
  • 举报
回复
数据不发生变化,就不刷新?
你的数据变化频率高吗?
可以再平时锁定刷新,到了需要刷新的时候才刷新
loop_k 2009-08-06
  • 打赏
  • 举报
回复

HWND hwnd = ::FindWindow("相机采集窗口", NULL);
CRect rect;
GetClientRect(hwnd,&rect);
InvalidateRect(hwnd,rect,FALSE);

用的这种方法,闪的太厉害。。
loop_k 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dronly 的回复:]
引用 7 楼 gordon3000 的回复:
这个方法一般是可以的,你用的是directShow么?
要先看清楚你的实现模型,一般线程做采集,然后通过消息通知窗口去主动的更新自己,用的就是
Invalidate(hdc,NULL,FALSE);
[/Quote]
没用DirectShow,能给说下怎么给窗口发送消息去更新吗
PS:这其实就是我最开始想问的
dronly 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 loop_k 的回复:]
引用 7 楼 gordon3000 的回复:
在OnPaint()里面绘图,当窗口遮挡、缩放等发生时能自动被动刷新。
内部数据发生了变化需要更行图像时用Invalidate(FALSE)函数,主动刷新。

我这个程序就是内部数据发生变化,然后去更新。
我要在程序采集的类里面去实现刷新。用Invalidate(FALSE)好像不行
[/Quote]

这个方法一般是可以的,你用的是directShow么?
要先看清楚你的实现模型,一般线程做采集,然后通过消息通知窗口去主动的更新自己,用的就是
Invalidate(hdc,NULL,FALSE);
loop_k 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gordon3000 的回复:]
在OnPaint()里面绘图,当窗口遮挡、缩放等发生时能自动被动刷新。
内部数据发生了变化需要更行图像时用Invalidate(FALSE)函数,主动刷新。
[/Quote]
我这个程序就是内部数据发生变化,然后去更新。
我要在程序采集的类里面去实现刷新。用Invalidate(FALSE)好像不行
loop_k 2009-08-05
  • 打赏
  • 举报
回复
这个就是个视频捕捉的程序。用的方法是创建一个线程(无限循环) 每一次循环采集一张图像 ,这时需要刷新显示图像的那个窗口,来实现视频的过程。
我想知道怎么刷新那个窗口。用OnPaint试了不得行。
副组长 2009-08-05
  • 打赏
  • 举报
回复
在OnPaint()里面绘图,当窗口遮挡、缩放等发生时能自动被动刷新。
内部数据发生了变化需要更行图像时用Invalidate(FALSE)函数,主动刷新。
oyljerry 2009-08-05
  • 打赏
  • 举报
回复
直接在窗口的Onpaint中画你的图像,这样就会实时刷新
dronly 2009-08-05
  • 打赏
  • 举报
回复
你做的是不是类似视频扑捉的程序?

可以用Invalidate(false);

在不刷新背景的情况下整屏bitblt是不会闪烁的。
byxdaz 2009-08-05
  • 打赏
  • 举报
回复
在OnPaint()函数里处理
雪影 2009-08-05
  • 打赏
  • 举报
回复
使用双缓冲技术,
现在内存dc画好图,
然后使用bitblt绘制在窗口中。
WooSir 2009-08-05
  • 打赏
  • 举报
回复
可以用定时器将采集的图像拷贝到这个窗口里,一般视频采集卡是有这个功能函数的
Ghost90 2009-08-05
  • 打赏
  • 举报
回复
用这个函数可以使窗口重绘 估计会闪
Invalidate()

还是在OnPaint()函数里处理把

19,468

社区成员

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

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