双缓冲的住代码段

来源:互联网 发布:windows触摸虚拟手柄 编辑:程序博客网 时间:2024/05/21 10:39

 //hdc为显示图像窗体的DC
    HDC dc;
    HBITMAP bit;
    int Width = pbi->bmiHeader.biWidth;
    int Height =pbi->bmiHeader.biHeight;
   
    //创建兼容DC和Bitmap
    dc = ::CreateCompatibleDC(hdc);
    bit = ::CreateCompatibleBitmap(hdc, Width, Height);

    HBITMAP oldBit = (HBITMAP)::SelectObject(dc, bit);
   
    //在刚创建的dc上显示图像
    ::StretchDIBits(dc, 0,0,Width, Height,0,0,Width, Height,
        pImageBuffer, pbi, DIB_RGB_COLORS,SRCCOPY);
   
    //调用CDC函数在刚创建的dc上画线或写字等
    HPEN pen = ::CreatePen(PS_SOLID, 1, RGB(240,0,0));
    HPEN oldPen = (HPEN)::SelectObject(hdc, pen);
    POINT dot;

    ::MoveToEx(dc, 0, K_SIZEY/2, &dot);
    ::LineTo(dc, K_SIZEX, K_SIZEY/2);

    ::MoveToEx(dc, K_SIZEX/2,0, &dot);
    ::LineTo(dc, K_SIZEX/2, K_SIZEY);

    //资源释放
    ::SelectObject(hdc, oldPen);
    ::DeleteObject(pen);

    //将已绘制好的dc拷贝到显示窗体上
    ::StretchBlt(hdc, 0,0,Width, Height, dc, 0, 0, Width, Height,SRCCOPY);

    //////////////////////////////////////////////////////////////////////////
    //资源释放
    SelectObject(dc, oldBit);
    ::DeleteDC(dc);
    ::DeleteObject(bit);

原创粉丝点击