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

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;
显示效果如下:

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

转载:http://blog.csdn.net/foreverling/article/details/40085431

上一篇:使用 Gradle 插件进行代码分析(转)


下一篇:Unity uGUI 登录界面