如何使刷新时画面不闪烁

  
创建位图内存,在内存里放置绘画数据,然后显示内存。为了避免内存在刷新时不断创建,所以内存只存窗口大小变化时创建。
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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值