日期:2014-05-16  浏览次数:20777 次

在MINIGUI中用双缓冲解决刷屏的办法?
在MINIGUI中用双缓冲解决刷屏的办法?
    在解决刷屏问题的时候,可以采用   MSG_EARSEBKGND:     ,现在想用双缓冲的办法来解决这个问题,代码如下:
[code]
          case   MSG_TIMER:
                              InvalidateRect   (hWnd,   &rc,   TRUE);
                              break;


                  case   MSG_PAINT:

                                hdcMem   =   CreateCompatibleDC   (HDC_SCREEN);
                                LoadBitmapFromFile   (hdcMem,   &s_bmp,   bmpno);

                                FillBoxWithBitmap   (hdcMem,   0,   0,   512,   480,   &s_bmp);
                                UnloadBitmap   (&s_bmp);

                                hdc   =   BeginPaint   (hWnd);
                                BitBlt   (hdcMem,   0,   0,   512,   480,   hdc,   0,   0,   0);
                                DeleteCompatibleDC   (hdcMem);

                                EndPaint   (hWnd,   hdc);
    [/code]    
    这个代码能编译运行,但是没有解决刷屏的问题,还是出现严重的闪烁,不知道问题出在什么地方,希望大虾们帮忙,谢谢!

------解决方案--------------------

hdc = BeginPaint (hWnd);
hdcMem = CreateCompatibleDC (hdc );
LoadBitmapFromFile (hdcMem, &s_bmp, bmpno);

FillBoxWithBitmap (hdcMem, 0, 0, 512, 480, &s_bmp);
UnloadBitmap (&s_bmp);


BitBlt (hdcMem, 0, 0, 512, 480, hdc, 0, 0, 0);
DeleteCompatibleDC (hdcMem);

EndPaint (hWnd, hdc);

兼容dc的建立不对,应该用beginpaint生成的dc来建立兼容dc,用HDC_SCREEN建立的没有意义。