在OnSize中重新设置控件的位置和尺寸,导致窗口狂闪烁,如何处理?

diaoni 2004-06-12 12:45:45
在OnSize中依次调用每个控件的MoveWindow,结果在改变主窗口的大小时,客户区狂闪,跪求解决之道!!
...全文
706 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
客户区狂闪
-----------
估计你一个控件移动了多次
diaoni 2004-09-22
  • 打赏
  • 举报
回复
算了,结吧,看来是没什么好的答案了
FreeSeagull 2004-08-09
  • 打赏
  • 举报
回复
我以前做过一个,解决办法比较笨拙.
移动的时候控件是画上去的,采用双缓冲.没有闪烁.
Micro_Sheng 2004-08-09
  • 打赏
  • 举报
回复
我也遇到这样的问题!

帮你 up N(N>=10000)次
全栈无侠 2004-08-09
  • 打赏
  • 举报
回复
up
windywalk 2004-08-09
  • 打赏
  • 举报
回复
关注
diaoni 2004-08-09
  • 打赏
  • 举报
回复
to laiyiling(最熟悉的陌生人):

效果好象更差了,还比不上MoveWindow(&rect,false),然后再InvalidateRect,再UpdateWindow效果好。
全栈无侠 2004-08-09
  • 打赏
  • 举报
回复
SetRedraw(FALSE)
DO SOMETHIS........
SetRedraw(TRUE)
Kudeet 2004-07-28
  • 打赏
  • 举报
回复
在移动前用ShowWindow(FALSE);让控件隐藏,MoveWindow()后用ShowWindow(TRUE);显示出来应该可以消除闪烁
diaoni 2004-07-28
  • 打赏
  • 举报
回复
to pomelowu(羽战士)

阁下的方法恐怕不行,假如主窗口不重刷背景,那么就会留下控件移动前的痕迹

to aoosang(智慧的鱼)

诚心请教

TMD,我把VC的窗口大小狂变了一番,人家的就是不闪!!

另外,对WM_ERASEBKGND十分抱有疑问。根据文档的说法,假如PAINTSTRUCT中的fErase为true,则在BeginPaint中会发送WM_ERASEBKGND,然后在OnEraseBkgnd中进行背景刷新工作。
大家想一下,当窗口收到WM_PAINT,就会调用OnPaint,然后我在OnPaint中调用BeginPaint,并让其刷新背景,这时BeginPaint会发送WM_ERASEBKGND到进程消息队列。现在问题是,窗口要从消息队列中取得WM_ERASEBKGND并调用OnEraseBkgnd,恐怕得在OnPaint返回之后吧,然而那时,绘图操作已经完成,它在檫除背景,岂不是什么都没有了?但事实却并不是那样。这里面到底有什么玄机?
aoosang 2004-07-20
  • 打赏
  • 举报
回复
艾,这些人竟在乱说话
snakewu 2004-07-20
  • 打赏
  • 举报
回复
在OnPaint里面放入MoveWindow试试看。
pomelowu 2004-07-20
  • 打赏
  • 举报
回复
为什么这样做?我的主窗口类是从CWnd继承的,CWnd::OnEraseBkgnd本来就是什么也没干。

____________

你如果不重载它,它由Framework调用,判断并设置窗口需要刷新的区域,并返回非零值。
而如果强制让它返回0,那么framework将不会刷新窗口区域,也就避免了闪烁
yeedward 2004-07-20
  • 打赏
  • 举报
回复
你改变客户区的大小的时候 是不是有大量的运算操作啊
yeedward 2004-07-20
  • 打赏
  • 举报
回复
我也遇到类似的问题 关注
diaoni 2004-07-20
  • 打赏
  • 举报
回复
up
diaoni 2004-07-14
  • 打赏
  • 举报
回复
to pomelowu(羽战士)

为什么这样做?我的主窗口类是从CWnd继承的,CWnd::OnEraseBkgnd本来就是什么也没干。

to bohut(伯虎)

为什么这样做?只要m_edit已经成功create,m_edit.GetSafeHWnd不是一定返回非NULL吗?

bohut 2004-07-08
  • 打赏
  • 举报
回复
if(m_edit.GetSafeHwnd())
{
m_edit.MoveWindow(...)
}
pomelowu 2004-07-08
  • 打赏
  • 举报
回复
不好意思,手写的,犯了个错误。 -_-#
BOOL CMyApp::OnEraseBkgnd()
{
return FALSE;
}
arkuka 2004-07-07
  • 打赏
  • 举报
回复
响应wm_erasebkgnd消息,然后直接返回FALSE
加载更多回复(5)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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