3. DDB位图编程
先看DDB加载按钮的单击事件代码:
void CBitMapExampleDlg::OnLoadddbpic() { 1: CBitmap bmpDraw; 2: bmpDraw.LoadBitmap( IDB_LOADED_BITMAP );//装入要加载的DDB位图 3: BITMAP bmpInfo; 4: bmpDraw.GetBitmap( &bmpInfo ); //获取要加载DDB位图的尺寸 5: CDC memDC;//定义一个兼容DC 6: CClientDC dc( this ); 7: memDC.CreateCompatibleDC( &dc );//创建兼容DC 8: CBitmap* pbmpOld = memDC.SelectObject( &bmpDraw );//保存原有DDB,并选入新DDB入DC
9: dc.BitBlt( 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, &memDC, 0, 0, SRCCOPY );
10: memDC.SelectObject( pbmpOld );//选入原DDB } |
上述代码将产生如图1所示的效果,位图被安置在对话框(0,0)坐标开始的位置上。
 图1 加载DDB位图资源 |
我们来逐行解析上述代码是怎样产生图1的效果的。
第1、2行定义了一个CBitmap对象,并调用其成员函数LoadBitmap加载工程中的位图资源IDB_LOADED_BITMAP。第3、4行定义了BITMAP结构体的实例并调用CBitmap的成员函数GetBitmap获得位图信息,BITMAP结构体定义在<wingdi.h>头文件中,其形式为:
/* Bitmap Header Definition */ typedef struct tagBITMAP { LONG bmType; //必需为0 LONG bmWidth; //位图的宽度(以像素为单位) LONG bmHeight; //位图的高度(以像素为单位) LONG bmWidthBytes; //每一扫描行所需的字节数,应是偶数 WORD bmPlanes; //色平面数 WORD bmBitsPixel; //色平面的颜色位数 LPVOID bmBits; //指向存储像素阵列的数组 } BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP; |
第5~8行的作用是:构建一个CDC对象,调用CDC::CreateCompatibleDC创建一个兼容的内存设备上下文,接着调用CDC::SelectObject将DDB选入内存设备上下文中。
第9行调用函数CDC::BitBlt绘制位图,CDC::BitBlt的原型为:
CDC::BitBlt(int x, int y, int nWidth, int nHeight, CDC *pSrcDC, int xSrc, int ySrc, DWORD dwRop) |
CDC::BitBlt执行的操作为将源DC中位图复制到目的DC中。其中前四个参数为目的区域的坐标(x,y)及长度和宽度(Width, nHeight),第五个参数是源DC指针,接下来的参数是源DC中的起始坐标,最后一个参数为光栅操作的类型。
第10行调用CDC::SelectObject把原来的DDB选入到内存设备上下文中并使新DDB脱离出来。
与CDC::BitBlt对应的还有另一个函数CDC::StretchBlt,它具有缩放功能,其原型为:
BOOL CDC::StretchBlt(int x, int y, int nWidth, int nHeight, CDC *pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop); |
该函数把位图从源矩形拷贝到目的矩形中,如果源和目的矩形尺寸不同,那么将缩放位图的功能以适应目的矩形的大小。函数的大部分参数与BitBlt的相同,但多了两个参数nSrcWidth和nSrcHeight用来指定源矩形的宽和高。
如果我们将函数CBitMapExampleDlg::OnLoadddbpic() 中的第9行改为:
CRect clientRect; GetClientRect(&clientRect); //获得对话框窗口的大小 dc.StretchBlt(0, 0, clientRect.right, clientRect.bottom, &memDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY); |
则单击加载按钮后的对话框如图2所示,位图被拉伸至整个对话框的范围。
 图2 拉伸位图 |
 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |