MFC - Picture Control 控件显示图片

1 VS2015 新建一个对话框工程,如图拖入三个控件,将 Picture Control 控件,修改属性 ID 为 IDC_IMAGE ,将 Edit Control 控件,修改属性 ID 为 IDC_EDIT_FILEPATH。

2 双击 Button 按钮,函数中实现。

cpp 复制代码
//浏览
void CBase64DemoDlg::OnBnClickedButtonBrowser()
{
	// TODO: Add your control notification handler code here
	//选择图片
	CFileDialog fileDlg(TRUE, _T("png"), NULL, 0, _T("image Files(*.bmp; *.jpg;*.png)|*.JPG;*.PNG;*.BMP|All Files (*.*) |*.*||"), this);
	//打开文件选择窗体 //如果点击"取消"按钮,直接退出
	if (fileDlg.DoModal() == IDCANCEL) return; 
	//获取图片路径(包含名称) //既有路径又有文件名,如D:/lena.jpg
	CString strFilePath = fileDlg.GetPathName();
	SetDlgItemText(IDC_EDIT_FILEPATH, strFilePath);
	//只获取文件名,如lena.jpg
	//CString strFileName = fileDlg.GetFileName();
	//判断路径不为空
	if (strFilePath == _T(""))
	{
		return;
	}

	//使用CImage的Load、Draw函数显示图像
	CImage image;
	image.Load(strFilePath);

	//学习下CImage的属性,无其他意义
	//int x = image.GetWidth(); 
	//int y = image.GetHeight();

	//获取控件的矩形
	CRect rectControl;  //控件矩形对象
	//Picture Control的ID为IDC_IMAGE
	CWnd  *pWnd = GetDlgItem(IDC_IMAGE); 
	pWnd->GetClientRect(&rectControl);

	//以控件为画布,在其上画图
	CDC *pDc = GetDlgItem(IDC_IMAGE)->GetDC();
	//绘图前必须调用此函数(设置缩放模式),否则失真严重
	SetStretchBltMode(pDc->m_hDC, STRETCH_HALFTONE);

	//画图(以下两种方法都可) //将图片绘制到Picture控件表示的矩形区域
	image.StretchBlt(pDc->m_hDC, rectControl, SRCCOPY);
	//image.Draw(pDc->m_hDC, rectControl);                

	image.Destroy();
	pWnd->ReleaseDC(pDc);
}

3 编译运行,点击浏览按钮,找到准备好的图片,选中,运行效果。

参考:

MFC在Picture控件上显示图像、保存图像

https://www.cnblogs.com/xixixing/p/12678709.html

相关推荐
程与留4 小时前
15_国际化和本地化:tr()、ts 文件、QM 文件、多语言切换
c++·qt
程与留6 小时前
14_Qt 样式表(QSS)入门(语法、选择器、美化实战)
c++·qt
欧特克_Glodon14 小时前
OpenCV计算机视觉开发入门与实践<二十七>:图像分割概述
c++·人工智能·opencv·计算机视觉
蒸蒸yyyyzwd14 小时前
cpp 选手秋招学习笔记 day21
c++·面试·八股
「QT(C++)开发工程师」1 天前
C++ auto 用法详解
开发语言·c++
OPEN-F1 天前
C++STL教程:容器适配器与实用工具
开发语言·c++
OPEN-F1 天前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++
有点。1 天前
C++二叉搜索树进阶
开发语言·c++
HugoStudio_SWAN1 天前
【擦除重绘】C++ 控制台动画:弹跳 Logo DVD 屏保效果
开发语言·c++·学习·程序人生
kyle~1 天前
C++_STL---迭代器失效
开发语言·c++