在资源视图Dialog中添加Picture Control和Edit Control控件,此处我们控件ID为:IDC_ShowPic、IDC_EDIT_SRC
//点击Button
void CMFCDialogPrinterDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CString imagePath = L"";
// TODO: 在此添加控件通知处理程序代码
BOOL isOpen = TRUE; //是否打开(否则为保存)
CString defaultDir = L"."; //默认打开的文件路径
CString fileName = L""; //默认打开的文件名
CString filter = L"文件 (*.png; *.jpg)|*.png;*.jpg||"; //文件过虑的类型
CFileDialog openFileDlg(isOpen, defaultDir, fileName, OFN_HIDEREADONLY | OFN_READONLY, filter, NULL);
openFileDlg.GetOFN().lpstrInitialDir = L"";
INT_PTR result = openFileDlg.DoModal();
CString filePath = defaultDir;
if (result == IDOK) {
filePath = openFileDlg.GetPathName();
imagePath = filePath;
}
CWnd::SetDlgItemTextW(IDC_EDIT_SRC, filePath); //获取文件绝对路径,并显示到Edit Control文本框中,控件ID为IDC_EDIT_SRC
CWnd * pWnd = GetDlgItem(IDC_ShowPic); //GetDlgItem,是根据继承关系的函数功能,返回窗口中指定参数ID的子元素的句柄,可以通过返回的句柄对窗口内的子元素进行操作。
//imagePath
CImage image;
CRect rect;
image.Load(filePath);
//获取图片的宽 高度
//int cx, cy;
//cx = image.GetWidth();
//cy = image.GetHeight();
//获取Picture Control控件的大小,ID为IDC_ShowPic
GetDlgItem(IDC_ShowPic)->GetWindowRect(&rect);
//将客户区选中到控件表示的矩形区域内
ScreenToClient(&rect);
//窗口移动到控件表示的区域
GetDlgItem(IDC_ShowPic)->MoveWindow(rect.left, rect.top, rect.Width(), rect.Height(), TRUE);
pWnd->GetClientRect(&rect); //获取句柄指向控件区域的大小
CDC *pDc = NULL;
pDc = pWnd->GetDC(); //获取picture的DC
SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE);
SetBrushOrgEx(pDc->m_hDC, 0, 0, NULL);
image.Draw(pDc->m_hDC, rect); //将图片绘制到picture表示的区域内
ReleaseDC(pDc);
}
效果运行结果如下: