孙鑫 第十课之五 窗口贴图(兼容DC)

1 说明

在一个窗口中显示一副位图的方法

①创建位图,加载位图

②创建兼容DC

③将位图选到兼容DC

④把位图从兼容DC中拷贝至目的DC

NOTE:窗口绘制有两步:首先擦除(WM_ERASEBKGND)窗口,然后重绘(OnDraw(CDC* pDC)),把上述代码写在第一步里位图的更新显示速度要快一些。

 

2 实例

①位图按1:1的比例从兼容DC拷贝至目的DC,此时图片不会缩小拉伸,原来多大就是多大。

CDC::BitBlt 

BOOL   BitBlt(

int  x,//目的DC左上角x坐标

int  y,//目的DC左上角y坐标

int   nWidth,//目的DC宽度

int  nHeight,  //目的DC高度

CDC  *pSrcDC,//源DC指针 

int   xSrc,//源DC左上角x坐标

int  ySrc,//源DC左上角y坐标

DWORD  dwRop //拷贝方式 

);

eg.

BOOL CMy56View::OnEraseBkgnd(CDC* pDC) 

{

    // TODO: Add your message handler code here and/or call default

    BOOL bRet;

    CBitmap bitmap;  

    bitmap.LoadBitmap(IDB_DESKTOP);  //创建/加载位图 

    CDC dcCompatible;  //创建兼容DC

    dcCompatible.CreateCompatibleDC(pDC); //选择兼容DC的目的DC

    dcCompatible.SelectObject(&bitmap);//将位图选至兼容DC

    CRect rect;  

    GetClientRect(&rect);  //取得客户区大小

    pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &dcCompatible, 0, 0, SRCCOPY);

    bRet = TRUE;

    return bRet;

    //return CView::OnEraseBkgnd(pDC);  //如果不屏蔽此句则返回后不能显示出图片(一闪而过)。

}

 

②图片可伸缩形式显示

CDC::StretchBlt

BOOL   StretchBlt(

int  x,//目的DC左上角x坐标                                   

int  y,//目的DC左上角y坐标

int  nWidth,//目的DC宽度

int  nHeight, //目的DC高度

CDC  *pSrcDC,//源DC

int  xSrc,//源DC左上角x坐标

int  ySrc,//源DC左上角y坐标

int  nSrcWidth,//源DC宽度

int  nSrcHeight, //源DC高度  可由CBitmap类成员函数GetBitmap(BITMAP *bitmap)取得  见下

DWORD  dwRop //拷贝模式

);

 

CBitmap::GetBitmap

int GetBitmap( BITMAP*pBitMap);  BITMAP为一个结构体类型

typedef struct tagBITMAP {  /* bm */  

int     bmType;    

int     bmWidth;     //位图宽度

int     bmHeight;     //位图高度

int     bmWidthBytes;    

BYTE    bmPlanes;    

BYTE    bmBitsPixel;    

LPVOID  bmBits; 

} BITMAP

 

eg.

BOOL CMy56View::OnEraseBkgnd(CDC* pDC) 

{

    // TODO: Add your message handler code here and/or call default

    BOOL bRet;

    CBitmap bitmap;

    bitmap.LoadBitmap(IDB_DESKTOP);

    BITMAP bmp;  //定义BITMAP结构体

    bitmap.GetBitmap(&bmp);  //取得宽度高度等信息

    CDC dcCompatible;

    dcCompatible.CreateCompatibleDC(pDC);

    dcCompatible.SelectObject(&bitmap);

    CRect rect;

    GetClientRect(&rect);

    pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &dcCompatible, 0, 0, bmp.bmWidth,                         bmp.bmHeight, SRCCOPY);     

    bRet = TRUE;

    return bRet;

    //return CView::OnEraseBkgnd(pDC);

}

 

 

 

孙鑫 第十课之五 窗口贴图(兼容DC) - 大灰狼 - 大灰狼 的博客?

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值