您的位置:首页 > 其它

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

2014-10-14 21:57 316 查看
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;显示效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: