CMemDC的功能:

a)通过资源ID加载进程内位图:BOOL LoadBitmap(UINT nBitmap, CDC* pDC = NULL);
B)通过文件名加载进程外位图:BOOL LoadBitmap(LPCSTR szFile, CDC* pDC = NULL);
C)在构造对象时加载进程内位图:CMemDC(UINT nBitmap, CDC* pDC = NULL);
D)在构造对象时加载进程外位图:CMemDC(LPCSTR szFile, CDC* pDC = NULL);
E)获取位图信息:int GetWidth();和int GetHeigth();
F)摧毁时检查和处理GDI泄露问题(在析构函数中调用):BOOL DeleteDC();
G)创建一个指定高宽的空白位图:BOOL Create(int cx, int cy, CDC* pDC = NULL);

 

#pragma once


class My_CMemDC : public CDC
{
    CSize m_size;
public:
    My_CMemDC()
    {
        m_size.cx = m_size.cy = 0;
    }
    My_CMemDC(UINT nBitmap, CDC * pDC = NULL)
    {
        LoadBitmap(nBitmap, pDC);
    }
    My_CMemDC(CString szFile, CDC *pDC = NULL)
    {
        LoadBitmap(szFile, pDC );
    }
    ~My_CMemDC()
    {
        DeleteDC();
    }
    int GetWidth(){ return m_size.cx; }
    int GetHeight(){ return m_size.cy; }
    BOOL DeleteDC()
    {
        if (!GetSafeHdc())
            return FALSE;
        CBitmap *pBitmap = GetCurrentBitmap();
        if (pBitmap)
            pBitmap->DeleteObject();
        return CDC::DeleteDC();
    }
    BOOL Create(int cx, int cy, CDC* pDC = NULL)
    {//创建空白位图
        CBitmap bmp;
        bmp.CreateCompatibleBitmap(pDC, cx, cy);
        CreateCompatibleDC(pDC);
        SelectObject(&bmp);
        return TRUE;
    }
    BOOL LoadBitmap(UINT nBitmap, CDC * pDC = NULL)
    {
        CBitmap bmp;
        if (!bmp.LoadBitmap(nBitmap))
            return FALSE;
        BITMAP bm;
        bmp.GetBitmap(&bm);
        m_size.cx = bm.bmWidth;
        m_size.cy = bm.bmHeight;
        CreateCompatibleDC(pDC);
        SelectObject(&bmp);
        return TRUE;
    }
    BOOL LoadBitmap(CString szFile, CDC *pDC = NULL)
    {
        HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, szFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
        if (!hBitmap)
            return FALSE;
        //CBitmap *pBitmap = CBitmap::FromHandle(hBitmap);
        BITMAP bm;
        //pBitmap->GetBitmap(&bm);
        GetObject(hBitmap, sizeof(bm), &bm);
        m_size.cx = bm.bmWidth;
        m_size.cy = bm.bmHeight;
        CreateCompatibleDC(pDC);
        SelectObject(hBitmap);
        return TRUE;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值