在View类的事件里面选中ID_FILE_OPEN,编写COMMAND函数,在这个消息响应函数中编写如下代码:
CString strfilepath; //获取文件的路径
m_bOpen=true; //判断是不是打开文件
void CLoadImageView::OnFileOpen()
{
m_bOpen=true;
CFileDialog pCFileDialog(true, NULL, NULL, 0, "位图文件(*.bmp)|*.bmp");
pCFileDialog.m_ofn.lpstrTitle = "打开文件";
if(pCFileDialog.DoModal() != IDOK)
{
return;
}
strfilepath=pCFileDialog.GetPathName();//获取文件路径与名称
AfxMessageBox(strfilepath);
Invalidate(1);
}
在OnDraw()函数中添加代码:
if( m_bOpen)
{
CBitmap bitmap;
//保存位图信息;
BITMAP bmp;
//建立兼容设备
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
HBITMAP hBitmap;
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),
strfilepath, //实际位图文件的路径
IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);//从文件中装入位图
bitmap.Detach(); //分离,我认为是跟上一个位图脱离关系,为了接收下一个位图
bitmap.Attach(hBitmap); //关联
bitmap.GetBitmap(&bmp);
dcCompatible.SelectObject(&bitmap);
//绘制非透明位图(将dcCompatible上的内容拷贝到pDC中)
pDC->BitBlt(100,100,bmp.bmWidth,bmp.bmHeight,&dcCompatible,0,0,SRCCOPY);
}
即可。