关于在MFC的picture控件里显示图片

准备工作:
1、先对主窗口(例设为CtextDlg)类添加一个用于打开文件的bool类型的函数Openfile,包含参数如下:
CString& fileName //
UINT nIDSTitle //
DWORD dwFlags //
bool bOpenFileDialog //
int* pType //

2、在主窗口添加picture控件和button控件,并将其ID改为ID_SHOWPIC和IDC_BUTTON_OPEN,并在主窗口的类向导里对ID_SHOWPIC添加变量,类型为CStatic,成员m_ShowPicture,确定。

3、由于要使用到CImage类,需要添加头文件atlimage.h,CImage的强大之处在于可以对图片进行修改,再进行保存。

代码部分:
1、打开文件的代码:

bool CtextDlg::OpenFile(CString& fileName, UINT nIDSTitle, DWORD dwFlags, bool bOpenFileDialog, int* pType)
{
 CFileDialog dlgFile(bOpenFileDialog);

 CString title;

 if (bOpenFileDialog) title = _T("Open file");

 else title = _T("Save file");

 dlgFile.m_ofn.Flags |= dwFlags;

 int nDocType = (pType != NULL) ? *pType : 0;

 int nIndex = 0;

 dlgFile.m_ofn.nFilterIndex = nIndex +1;

 CString strDefExt = _T("pal");

 dlgFile.m_ofn.lpstrDefExt = strDefExt;

//打开文件的类型
 CString strFilter = _T("*.jpg");
 strFilter += (TCHAR)NULL;
 strFilter += _T("*.jpg");
 strFilter += (TCHAR)NULL;
 strFilter += _T("*.*");
 strFilter += (TCHAR)NULL;
 strFilter += _T("*.*");
 strFilter += (TCHAR)NULL;
 strFilter += _T("*.bmp");
 strFilter += (TCHAR)NULL;
 strFilter += _T("*.bmp");
 strFilter += (TCHAR)NULL;

 dlgFile.m_ofn.lpstrFilter = strFilter;

 dlgFile.m_ofn.lpstrTitle = title;

 dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH);

 BOOL bRet = (dlgFile.DoModal() == IDOK) ? TRUE : FALSE;

 fileName.ReleaseBuffer();

 if (bRet){
  if (pType != NULL){
   int nIndex = (int)dlgFile.m_ofn.nFilterIndex - 1;
   ASSERT(nIndex >= 0);
  }
 }
 return bRet;
}

2、之后就是对按钮的操作来打开并显示图片,双击按钮控件编辑:

void CtextDlg::OnBnClickedButtonOpen()
{
 // TODO: 在此添加控件通知处理程序代码
 CString filename;
 if (!OpenFile(filename, AFX_IDS_OPENFILE, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, TRUE, NULL))
  return; // open cancelled

//在picture控件内显示图片,这里用到了CImage类

 CDC*pDC =m_ShowPicture.GetWindowDC();//创造设备环境

 CImage m_img;//由于使用到了CImage类,要添加头文件atlimage.h

  m_img.Load(filename);//加载文件路径

 RECT rc;
  m_ShowPicture.GetClientRect(&rc);
  int rcWidth = rc.right - rc.left;
  int rcHeight = rc.bottom - rc.top;

 pDC->SetStretchBltMode(STRETCH_HALFTONE); //避免失真

 m_img.Draw(pDC->m_hDC,0,0,rcWidth,rcHeight);//“画图”

 ReleaseDC(pDC);//释放设备环境
 }

你可能感兴趣的:(mfc)