绘制一个位图(Bitmap)对象

绘制一个位图(Bitmap)对象

  GDI的所有操作都是在DC(device context)上进行的,所以首先你应该有DC的概念,如果你对DC还不了解,现在就去翻一翻Windows编程的书吧。

       首先我们要Load一个Bitmap对象,使用Win32 API可以写成这样:

    //从资源Load一个位图,如果从文件load的话,可以使用::LoadImage()
HBITMAP hbmp=::LoadBitmap(hInstance,MAKEINTRESOURCE(IDB_MYBMP));

如果使用MFC可以这样写:

    CBitmap bmp;
    Bmp.LoadBitmap(IDB_MYBMP);

想把这个位图对象绘制到窗口上就要先得到窗口的DC,然后对这个DC操作。请留意创建MemoryDC的代码,后面会用到。

Win32 API的版本:

//假设位图大小为100*100像素

   //假设hwnd是要绘制的窗口的HANDLE

   HDC hwnddc=::GetDC(hwnd);

   HDC memdc=::CreateCompatibleDC(hwnddc);

   HBITMAP oldbmp=::SelectObject(memdc,hbmp);

   ::BitBlt(hwnddc,0,0,100,100,memdc,0,0,SRCCOPY);

   if(oldbmp)

       ::SelectObject(memdc,oldbmp);

   DeleteDC(memdc);

   ::ReleaseDC(hwnd,hwnddc);

MFC版本:

    //假设是在一个CWnd派生类的成员函数中
    CClientDC dc(this);
    CDC memdc;
    memdc.CreateCompatibleDC(&dc);
    CBitmap *oldbmp=memdc.SelectObject(&bmp);
    dc.BitBlt(0,0,100,100,&memdc,0,0,SRCCOPY);
    if(oldbmp)
        memdc.SelectObject(oldbmp);

也可以这样:

      CClientDC dc(this);
            dc.DrawState(CPoint(0,0),CSize(100,100),&bmp,DST_BITMAP);
 

基本的代码就是这样,当然有更多的API可以用,这就要看你自己的了。J


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值