社区
界面
帖子详情
对话框中调用InvalidateRect()不停闪的问题!
cococut
2006-06-19 11:17:22
1,对话框中有一个定时器,一分钟调用
::InvalidateRect(this->m_hWnd,&rc1,FALSE);一次,
对话框中的某个区域(该区域中有很多控件)进行刷新,可是界面不停的闪,
怎么解决?
谢谢!
...全文
436
14
打赏
收藏
对话框中调用InvalidateRect()不停闪的问题!
1,对话框中有一个定时器,一分钟调用 ::InvalidateRect(this->m_hWnd,&rc1,FALSE);一次, 对话框中的某个区域(该区域中有很多控件)进行刷新,可是界面不停的闪, 怎么解决? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuyuan830705
2006-06-19
打赏
举报
回复
先Invalidate()再ValidateRect()都不行啊?只好看别人怎么做了~~~学习一下~~~
cococut
2006-06-19
打赏
举报
回复
TO yuyuan830705() 不行,用InvalidateRect()界面才能正确刷新,不过就是很闪,
to lixiaosan(小三),怎么用双缓冲绘图,能详细给我说说吗?
to DentistryDoctor,rc1是我用刷新的界面上的某个区域!
yuyuan830705
2006-06-19
打赏
举报
回复
这样吧:Invalidate()之后。再用:ValidateRect()函数禁止这块画面更新。试试看吧?
lixiaosan
2006-06-19
打赏
举报
回复
重载OnEraseBkgnd(CDC* pDC) ,直接返回TRUE
双缓冲绘图
DentistryDoctor
2006-06-19
打赏
举报
回复
rc1?
cococut
2006-06-19
打赏
举报
回复
to zhucde(【風間苍月】) ,我用过啦,这样控件可以刷新,
背景不能刷新,都黑啦,我的界面是不能快速拉动滚动条,
界面上的播放的视频会盖住我的一些按钮,我需要把按钮刷新。
cococut
2006-06-19
打赏
举报
回复
不会,就是那块的那个区域在闪,
Invalidate(false)我用过,
不能刷,用InvalidateRect()才能刷,
不过就是闪。
zhucde
2006-06-19
打赏
举报
回复
对各个控件单独进行刷新:
GetDlgItem(IDC_STATICPIC)->RedrawWindow();
GetDlgItem(IDC_DSTPIC)-> Invalidate(0);
yuyuan830705
2006-06-19
打赏
举报
回复
::InvalidateRect(this->m_hWnd,&rc1,FALSE);?
this是这块区域的m_hWnd?会不会是楼主不小心用成了整个Dialog的m_hWnd??
mynamelj
2006-06-19
打赏
举报
回复
这是让窗口重绘,控件应该会自已更新的吧,干嘛要用invalidate,当绘图的时候才用到它的
syy64
2006-06-19
打赏
举报
回复
Invalidate(false)试试。
booklove
2006-06-19
打赏
举报
回复
写一个draw函数,像画图一样专门画你的rc1这一部分,隔一分钟draw一下,不要刷新,就不闪了。
cococut
2006-06-19
打赏
举报
回复
TO lixiaosan(小三) ( )
我在我的对话框中添加,
BOOL CMyDlg::OnEraseBkgnd(CDC* pDC)
{
int nWidth;
int nHeight;
CRect rect;
GetWindowRect(&rect);
nWidth = rect.Width();
nHeight= rect.Height();
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC (NULL);
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
return TRUE;
//return CWnd::OnEraseBkgnd(pDC);
}
还是很闪,为什么?
lixiaosan
2006-06-19
打赏
举报
回复
http://www.pconline.com.cn/pcedu/empolder/gj/vc/0507/653941.html
GetClientRe
ct
()和
Invalid
a
teRe
ct
()的使用
本文介绍了GetClientRe
ct
()和
Invalid
a
teRe
ct
()的作用。GetClientRe
ct
()用于获取窗口客户区矩形坐标,
Invalid
a
teRe
ct
()用于标记指定区域无效触发重绘。若在
Invalid
a
teRe
ct
()前未
调用
GetClientRe
ct
(),会导致重绘范围错误、程序崩溃等
问题
,最佳做法是
调用
前者获取准确坐标。
Invalid
a
teRe
ct
()与
Invalid
ate()
本文介绍了Windows API
中
的
Invalid
ate()和
Invalid
a
teRe
ct
()函数,用于窗口重绘。
Invalid
ate()使整个窗口客户区无效,而
Invalid
a
teRe
ct
()允许指定重绘的矩形区域,可减少
闪
烁。UpdateWindow()则用于立即强制窗口重绘。文
中
还探讨了逻辑坐标和设备坐标的概念以及转换方法。
Invalid
a
tere
ct
()函数的作用详细解释
本文详细解析了
Invalid
a
teRe
ct
函数的使用方法及其参数含义。通过示例代码展示了如何利用此函数更新窗口的指定区域,包括如何发送WM_PAINT消息及WM_ERASEBKGND消息以重绘窗口背景。
Invalid
a
teRe
ct
()与
Invalid
ate()的用法
本文详细介绍了
Invalid
a
teRe
ct
函数的功能及使用方法,解释了其如何触发窗口重绘,并探讨了与之相关的UpdateWindow函数的作用。此外,还对比了
Invalid
ate与
Invalid
a
teRe
ct
的区别,以及UpdateData的功能。
Invalid
a
teRe
ct
()小解
本文详细介绍了
Invalid
a
teRe
ct
和UpdateWindow函数的功能与使用方法。
Invalid
a
teRe
ct
用于标记需要重绘的区域,并不会立即触发重绘,而是等待WM_PAINT消息的处理。UpdateWindow则会立即发送WM_PAINT消息,若客户区存在无效区域则直接
调用
窗口过程进行刷新。
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章