使用GDI位图

来源:互联网 发布:手机软件源码 编辑:程序博客网 时间:2024/06/07 19:45

  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。

 

原创粉丝点击