修改框架程序的显示效果
VC++培训教程草稿(2000年撰写) 张孝祥、袁龙友著 网址:
看到位图的一部分,如果想在视图窗口上显示整个位图而不管视图窗口多大时,可以用StretchBlt函数。
步骤4:修改CEX09_02View::OnDraw函数代码,将位图拉伸显示,代码如下: void CEX09_02View::OnDraw(CDC* pDC) { CEX09_02Doc* pDoc = GetDocument(); }
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here //产生一个兼容DC CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC); //创建及装入位图资源 CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP1); //将位图选入兼容DC
dcCompatible.SelectObject(&bmp); //将兼容DC上的内容拷入当前DC上 CRect rect;
GetClientRect(&rect); //获取位图信息
BITMAP bitmap;
bmp.GetBitmap(&bitmap);
可以看出,函数的语句去掉了,而且又添加最后的三条代码。
新加的代码中首先定义了一个BITMAP结构类型的对象bitmap,BITMAP结构包含很多数据成员,如bmType、、bmHeight等等,这些数据成员包含位图的相关信息。
代码是将位图bmp的信息及属性取出放到先前定义的bitmap变量中。
StretchBlt将位图贴到视图窗口,并且调节位图大小来适应视
int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc,
, int nSrcWidth, int nSrcHeight, DWORD dwRop );
x和y,分别表示目的矩形的左上角的x坐标和y坐标。 nWidth和nHeight,分别表示目的矩形的宽度和高度。
第五个参数pSrcDC,指向包含位图的源DC。
第六、七个参数xSrc、ySrc,分别表示源矩形(即源DC)左上角的x和y坐标。 第八、九个参数nSrcWidth、nSrcHeight,分别表示源矩形(即源DC)的宽度和高度,本例中通过调用bitmap.bmWidth,bitmap.bmHeight取得位图的宽度和高度,这两个值也就是源DC的高度和宽度。其中bmWidth和bmHeight就是BITMAP结构中用来表示位图宽度和高度的两个数据成员。
编译运行程序,结果如图9-10所示,不管视图窗口怎么样改变,都可以显示完整的位