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返回之后吧,然而那时,绘图操作已经完成,它在檫除背景,岂不是什么都没有了?但事实却并不是那样。这里面到底有什么玄机?
有个bRepaint,设为FALSE,onsize结束作一次统一repaint试试看?
{
return FALSE;
}试试。记得添加消息映射
BOOL CMyApp::OnEraseBkgnd()
{
return FALSE;
}
{
m_edit.MoveWindow(...)
}
而如果强制让它返回0,那么framework将不会刷新窗口区域,也就避免了闪烁
大家想一下,当窗口收到WM_PAINT,就会调用OnPaint,然后我在OnPaint中调用BeginPaint,并让其刷新背景,这时BeginPaint会发送WM_ERASEBKGND到进程消息队列。现在问题是,窗口要从消息队列中取得WM_ERASEBKGND并调用OnEraseBkgnd,恐怕得在OnPaint返回之后吧,然而那时,绘图操作已经完成,它在檫除背景,岂不是什么都没有了?但事实却并不是那样。这里面到底有什么玄机?
DO SOMETHIS........
SetRedraw(TRUE)