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







  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值