使用GDI位图

  GDI位图只是另一个GDI对象,例如笔或者字体。你必须先创建一个位图,然后将它选入设备环境。当你完成改对象的操作之后,必须解除对它的选中,并删除它。

尽管如此,仍有一些问题,原因是显示器的“位图”实际上就是显示器表面映像,打印机设备的“位图”是打印页面本身。因此不能将位图选入显示设备环境或者打印机设备环境。必须使用CDC::CreateCompatibleDC 函数为位图创建一个特殊的内存设备环境。然后使用CDC::StretchBlt或者CDC::BitBlt来从内存设备环境中向"真正"的设备环境中复制这些位。

范例:

void CBlat2View::OnDraw(CDC* pDC)
{
   CBlat2Doc* pDoc = GetDocument();
   ASSERT_VALID(pDoc);

   // load IDB_BITMAP1 from our resources
   CBitmap bmp;
   if (bmp.LoadBitmap(IDB_BITMAP1))
   {
      // Get the size of the bitmap
      BITMAP bmpInfo;
      bmp.GetBitmap(&bmpInfo);

      // Create an in-memory DC compatible with the
      // display DC we're using to paint
      CDC dcMemory;
      dcMemory.CreateCompatibleDC(pDC);

      // Select the bitmap into the in-memory DC
      CBitmap* pOldBitmap = dcMemory.SelectObject(&bmp);

      // Find a centerpoint for the bitmap in the client area
      CRect rect;
      GetClientRect(&rect);
      int nX = rect.left + (rect.Width() - bmpInfo.bmWidth) / 2;
      int nY = rect.top + (rect.Height() - bmpInfo.bmHeight) / 2;

      // Copy the bits from the in-memory DC into the on-
      // screen DC to actually do the painting. Use the centerpoint
      // we computed for the target offset.
      pDC->BitBlt(nX, nY, bmpInfo.bmWidth, bmpInfo.bmHeight, &dcMemory, 
         0, 0, SRCCOPY);

      dcMemory.SelectObject(pOldBitmap);
   }
   else
      TRACE0("ERROR: Where's IDB_BITMAP1?\n");
}

显示映射模式:MM_TEXT 每个位图像素将映射为一个显示像素。

                          MM_LOENGLISH :位图大小将是 0.54*0.96 英寸。

 

注 GDI对象包括:Cbitmap, CBrush,CFont, CPalette,CPen,CRgn。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值