要在视图中显示位图,难点在于控件需要自己添加,位置要自己定。在MDI中添加位图有如下几个步骤:
- 首先添加一个显示控件。这里的添加和其他控件的添加相类似。
有两个地方可以添加代码来创建控件:CtestMDIView::OnCreate 和 CtestMDIView::OnInitialUpdate。CtestMDIView::OnCreate 的执行点比较靠先。这里我为了自己的需要选择了在CtestMDIView::OnInitialUpdate中创建控件
GetClientRect(Rect);
// add picture wide = 50 height = 100
myRect = Rect;
myRect.bottom = myRect.top + 100;
myRect.left = myRect.right + 20;m_PicShow.Create( "Picture Show", WS_CHILD|WS_VISIBLE|WS_BORDER,
CRect(Rect.right + 500,Rect.top + 20,Rect.right + 100,Rect.top + 120), this, 12002 );
- 其次,为显示控件增加移动代码,以便响应窗口变化。即在
void CtestMDIView::OnSize(UINT nType, int cx, int cy)
{
CRect Rect;
CView::OnSize(nType, cx, cy);
if(canSize){
GetClientRect(Rect);
m_PicShow.MoveWindow()
}
}
其实加载显示位图位图并不象如上这么复杂,只需要加载并在OnPaint()或OnDraw中显示就可以了,代码如下
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);CBitmap cBitmap;
BITMAP bitMap;
CDC dcMem;dcMem.CreateCompatibleDC(&dc);
cBitmap.LoadBitmap( IDB_PLAY1 );
cBitmap.GetBitmap(&bitMap);CBitmap *pbmpOld=dcMem.SelectObject(&cBitmap);
dc.StretchBlt( m_rectPicLoc.left,m_rectPicLoc.top,
m_rectPicLoc.right - m_rectPicLoc.left,
m_rectPicLoc.bottom - m_rectPicLoc.top,
&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);
其中IDB_PLAY1即要显示的图片资源。
这里是将图片加入资源来显示,适用于图片预先已知。若图片未知,则可用LoadBitmap打开图像,然后以同样的方式显示
另外还可以用Bltblt来显示图片,以加快速度