如何避免在改变窗口大小时的闪烁?已经使用RECT保存剪切掉(或新增加)的区域,只刷新该区域,可是还是不行。
使用WIN32编的:
case WM_COMMAND:
rect.left = 700;
rect.right = 975;
rect.top = 0;
rect.bottom = 550;
if ((HWND)lParam == hButton1)//如何防止闪屏
{
ShowWindow(hButton1, SW_HIDE);
MoveWindow(hwnd, 100, 100, 800, 550, TRUE);
InvalidateRect(hwnd, &rect, TRUE);
UpdateWindow (hwnd);
ShowWindow(hButton2, SW_SHOW);
}
难道MoveWindow一定会刷新整个窗口?谢谢

解决方案 »

  1.   

    改变窗口时,windows 会向程序发送 WM_PAINT 消息,如果 WM_PAINT 消息不作任何处理,也就不刷新窗口了.
    例如:
        case WM_PAINT:       return TRUE;
    返回true 告诉程序,所有的WM_PAINT 事件,我已经自己处理完了,windows 操作系统不要管了..如果希望windows 做余下的事情就返回 FALSE
      

  2.   

    这都是从哪里来的说法?错到不着边际。对WM_PAINT消息直接return的后果将是:系统会永不停息地给你的窗口发WM_PAINT。
      

  3.   

    当窗口大小变化时,如果窗口类的style = CS_HREDRAW | CS_VREDRAW;
    整个窗口都会重绘,简单的解决办法就是 style = 0;