MFC对话框应用程序显示图像

简介: 1 首先创建一个基于对话框的MFC应用程序MFCDlgTest 2 打开资源视图,插入新的对话框,修改ID为IDD_SHOWIMGDLG,右击对话框,添加类CShowImgDlg。在ShowImgDlg.h头文件中包含<atlimage.h>头文件,并建立CImage对象 #include <atlimage.h>private: CImage imag

1 首先创建一个基于对话框的MFC应用程序MFCDlgTest

2 打开资源视图,插入新的对话框,修改ID为IDD_SHOWIMGDLG,右击对话框,添加类CShowImgDlg。在ShowImgDlg.h头文件中包含<atlimage.h>头文件,并建立CImage对象

#include <atlimage.h>

private:
	CImage image;

3 删除对话框中的无关控件,添加一个新按钮“打开图像”,修改其ID为IDC_OPEN,并添加事件处理程序,类选择刚刚创建的CShowImgDlg

4 添加按钮点击事件代码

void CMFCDlgTestDlg::OnBnClickedOpen()
{
	// TODO: 在此添加控件通知处理程序代码
	CFileDialog dlg(TRUE, _T(".jpg"), _T("*.jpg"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
		_T("位图文件(*.bmp)|*.bmp|JPEG(*.jpg)|*.jpg||"));
	if(dlg.DoModal() == IDOK)
	{
		if(!image.IsNull())
		{
			image.Destroy();
		}
		image.Load(dlg.GetPathName());
		Invalidate();
	}
}
5 重写CShowImgDlg类的OnPaint()方法,由于类向导中没有找到OnPaint()虚函数,故采用手动添加的方式。

   首先在ShowImgDlg头文件中添加函数声明:

public:
	afx_msg void OnClickedOpen();
然后在ShowImgDlg.cpp文件中添加OnPaint()函数的代码:

void CShowImgDlg::OnPaint()
{
	if(IsIconic())
	{
		CPaintDC dc(this);
		SendMessage(WM_ICONERASEBKGND, (WPARAM)dc.GetSafeHdc(), 0);
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
		dc.DrawIcon(x,y,m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();

		CDC *pDc = this->GetDC();
		if(!image.IsNull())
		{
			image.Draw(pDc->GetSafeHdc(), 0, 0);
		}

		this->ReleaseDC(pDc);
	}
}
仅做出上述改动时发现,在对话框中选择图片文件后,未能在对话框中打开,原因是手动添加的OnPaint()函数没有被调用,因此需要在ShowImgDlg.cpp文件的添加ON_WM_PAINT()代码,如下:

BEGIN_MESSAGE_MAP(CShowImgDlg, CDialogEx)
	ON_WM_PAINT() //添加的代码
	ON_BN_CLICKED(IDC_OPEN, &CShowImgDlg::OnClickedOpen)
END_MESSAGE_MAP()
6 最后,因为我们添加的对话框不是默认的主对话框,因此需要将MFCDlgTest.cpp中CMFCDlgTestApp::InitInstance()函数的如下代码注释:
/*CMFCDlgTestDlg dlg;
m_pMainWnd = &dlg;*/
并添加如下代码:

CShowImgDlg dlg;
m_pMainWnd = &dlg;
显示效果如下:







目录
相关文章
10 MFC - 对话框应用程序框架介绍
10 MFC - 对话框应用程序框架介绍
98 0
|
C++ Windows
09 MFC - 创建基于对话框的 MFC 应用程序框架
09 MFC - 创建基于对话框的 MFC 应用程序框架
94 0
|
测试技术 BI 区块链
MFC——对话框的创建及使用(上)
MFC——对话框的创建及使用
1252 0
MFC——对话框的创建及使用(上)
|
数据安全/隐私保护
MFC——对话框的创建及使用(下)
MFC——对话框的创建及使用
279 0
MFC——对话框的创建及使用(下)
MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)
MFC学习——如何在MFC对话框中添加一个显示网页的窗口(用vs2017以下版本,vs2017不支持)
377 0
QT应用编程: 鼠标拖动文件到应用程序窗口
QT应用编程: 鼠标拖动文件到应用程序窗口
321 0
QT应用编程: 鼠标拖动文件到应用程序窗口
Qt自定义界面类并提升(提升的窗口部件)
Qt自定义界面类并提升(提升的窗口部件)
1376 0
Qt自定义界面类并提升(提升的窗口部件)
MFC创建单文档工程(为窗口添加背景图)
首先把BMP位图图片添加到资源文件res文件夹下; 其次,资源视图——VT_Ards.rc——右键选择添加资源,选择Bitmap,导入BMP图片并修改图片ID; 然后添加代码(详见MFC单文档工程为窗口添加背景图代码) ...
1644 0
|
区块链
MFC创建单文档工程(左上角名称前的mfc图标修改为其他需求图标)
资源视图——VT_Ards.rc——右键选择添加资源,选择menu,然后导入 (提前最好把ico图标放到工程文件下的res文件夹下) 图标属性ID为:IDR_MAINFRAME ...
1529 0