MFC-CreateCompatibleBitmap创建兼容位图

 

    
    HDC hdc = ::GetDC(m_hWnd);
    HDC hdcmen = ::CreateCompatibleDC(hdc);//创建内存DC
    RECT rect;
    ::GetClientRect(m_hWnd, &rect);//获取窗口客户区的坐标
    HBITMAP hbmp = CreateCompatibleBitmap(hdcmen,rect.right-rect.left,rect.bottom-rect.top);//创建兼容位图
    /*
    参数1:HDC hdc   内存DC
    参数2:int nWidth  指定位图的宽度,单位为像素
    参数3:int nHeight  指定位图的高度,单位为像素
    返回值:如果函数执行成功,那么返回值是位图的句柄;如果函数执行失败,那么返回值为NULL
    */

 

 实例:在内存DC中绘制

//*********全局变量*************
HWND hWnd;
CWnd* pWnd;
HDC hdc;
HDC hdcmen;
HBITMAP holdbmp;
HBITMAP hbmpmen;
RECT rect;
HBRUSH hbr;
HPEN hpen;



//代码

    pWnd = GetDlgItem(IDC_picture);  //获取picture控件句柄
    hWnd = pWnd->GetSafeHwnd();//CWnd*转化为HWND
    hdc = ::GetDC(hWnd);

    hdcmen = ::CreateCompatibleDC(hdc);//创建内存DC
    /*
    这时还不能用绘图语句绘图,因为没有地方画
    需要建立一个兼容的位图
    */

    ::GetClientRect(hWnd, &rect);//获取picture控件客户区的坐标
    hbmpmen = CreateCompatibleBitmap(hdcmen, rect.right - rect.left, rect.bottom - rect.top);//创建兼容位图
    holdbmp = (HBITMAP)::SelectObject(hdcmen, hbmpmen);//把兼容位图放到内存DC
    /*
    内存DC中只有放入内存位图才能绘制    
    */

    //*******开始绘制********
    hbr = CreateSolidBrush(RGB(255, 255, 255));
    hpen = CreatePen(PS_SOLID, 10, RGB(0, 0, 255));//创建画笔

    int f = FillRect(hdcmen, &rect, hbr);//绘制并填充矩形
    ::MoveToEx(hdc, 100, 100, NULL);
    LineTo(hdcmen, 200, 50);//绘制直线

    BitBlt(hdc, 0, 0, rect.right - rect.left, rect.bottom - rect.top, hdcmen, 0, 0, SRCCOPY);//把源DC拷贝到目标DC

 

 

 

 

 

posted @ 2023-05-13 07:37  天子骄龙  阅读(334)  评论(0)    收藏  举报