如何使刷新时画面不闪烁

来源:互联网 发布:下载word办公软件 编辑:程序博客网 时间:2024/04/26 07:31
  
创建位图内存,在内存里放置绘画数据,然后显示内存。为了避免内存在刷新时不断创建,所以内存只存窗口大小变化时创建。
HDC       hMemDC=0;//global variat
WM_PAINT:
if(hMemDC==0)
              CreateMemDC(Rect,hDC,hMemDC);       //Rect为窗体大小
       DrawBack(hDC,Rect,hMemDC);
WM_SIZE:
GetClientRect(hWnd,&Rect);
       if(Rect.right==0||Rect.bottom==0)
              return 0;
       if(hMemDC!=0)
              ReleaseMemDC(hWnd,hMemDC);
       hDC=GetDC(hWnd);
       CreateMemDC(Rect,hDC,hMemDC);
       DeleteDC(hDC);
WM_DESTROY:
       ReleaseMemDC(hWnd,hMemDC);
/*名称:CreateMemDC
 功能:创建显存hMemDC
 参数:hDC
*/
int CreateMemDC(RECT Rect,HDC hDC,HDC &hMemDC)
{
       hMemDC=CreateCompatibleDC(hDC);
       hMembitmap=CreateCompatibleBitmap(hDC,Rect.right-Rect.left,Rect.bottom-Rect.top);
       SelectObject(hMemDC,hMembitmap);
       BitBlt(hMemDC,Rect.left,Rect.top,Rect.right-Rect.left,Rect.bottom-Rect.top,hDC,0,0,SRCCOPY);
return 1;
}
/*名称:ReleaseMemDC
 功能:释放显存hMemDC
 参数:释放显存hMemDC
*/
int ReleaseMemDC(HWND hWnd,HDC &hMemDC)
{
       DeleteObject(hMembitmap);
       DeleteObject(hMemDC);         
       return 1;
}
/*名称:DrawBack
 功能:画波形
 参数:HDC,显存hMemDC数据
*/
int DrawBack(HDC hDC,RECT Rect,HDC hMemDC)
{
    TextOut(hMemDC,0,0,”hello”,5);//在内存写数据
BitBlt(hDC,Rect.left,Rect.top,Rect.right,Rect.bottom,hMemDC,0,0,SRCCOPY);//将hMemDC数据显示在hDC上。
Return 1;
}
原创粉丝点击