1、添加一个Picture Control,关联变量为 m_picture,定义一个全局变量CString m_path.
2、添加一个打开jpg图片的按钮,并添加按钮事件:void ...Dlg::OnOpen()。
void ...Dlg::OnOpen()
{
CFileDialog cfd(true,_T(".jpg"),NULL,OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,_T("Executable Files (*.jpg)|*.jpg|All Files (*.*)|*.*||"),this); //选项图片的约定
if(cfd.DoModal()!=IDOK) //判断是否获得图片
{
return;
}
m_path = cfd.GetPathName(); //获得图片路径
UpdateData(false); //更新路径公共变量
ShowPicture(); //调用显示图片函数
}
3、添加函数void ...Dlg::ShowPicture(void)。
void ...Dlg::ShowPicture(void)
{
if(m_path=="") //判断图片路径是否存在
{
return;
}
//AfxMessageBox(_T("读取到图片路径"));
CRect rect;
m_picture.GetClientRect(&rect); //m_picture为Picture Control控件变量,获得控件的区域对象
CImage image; //使用图片类
image.Load(m_path); //装载路径下图片信息到图片类
CDC* pDC = m_picture.GetWindowDC(); //获得显示控件的DC
image.Draw( pDC -> m_hDC,rect); //图片类的图片绘制Draw函数
ReleaseDC(pDC);
}
4、在void ...Dlg::OnPaint()添加:
void ...Dlg::OnPaint()
{
if (IsIconic())
{
....
}
else
{
CDialog::OnPaint();
CDialog::UpdateWindow(); //更新windows窗口
ShowPicture(); //重绘图片函数
}
}
1.若出现CImage未定义,则包含进头文件:#include <atlimage.h>.
2.若出现:stdafx.obj : error LNK2005: "class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > > m_path" (?m_path@@3V?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@A)
说明头文件中的变量定义可能出问题了。
我是在stdafx.h头文件中定义了:
CString m_path; 出错;
后将此定义放到我的.C文件中直接定义,编译通过。
3.清除JPG图片:
CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC1);
pStatic->SetBitmap(NULL);
我用:
m_picture.SetBitmap(NULL);
UpdateData(false); //更新路径公共变量
ShowPicture(); //调用显示图片函数