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 @   天子骄龙  阅读(297)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-05-13 CAD2019-直线的绘制及标注
2019-05-13 python-异常
点击右上角即可分享
微信分享提示