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

来源:互联网 发布:淘宝账户怎么登录 编辑:程序博客网 时间:2024/06/06 14:24

准备工作:
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);//释放设备环境 }
0 0
原创粉丝点击