imagedemoview.cpp

来自「VC.net 的一些有用的技巧」· C++ 代码 · 共 155 行

CPP
155
字号
// ImageDemoView.cpp : CImageDemoView 类的实现
//

#include "stdafx.h"
#include "ImageDemo.h"

#include "ImageDemoDoc.h"
#include "ImageDemoView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CImageDemoView

IMPLEMENT_DYNCREATE(CImageDemoView, CView)

BEGIN_MESSAGE_MAP(CImageDemoView, CView)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
END_MESSAGE_MAP()

// CImageDemoView 构造/销毁

CImageDemoView::CImageDemoView()
{
	// TODO: 在此处添加构造代码

}

CImageDemoView::~CImageDemoView()
{
}

BOOL CImageDemoView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
	// 样式

	return CView::PreCreateWindow(cs);
}

// CImageDemoView 绘制

void CImageDemoView::OnDraw(CDC* pDC)
{
	CImageDemoDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// TODO: 在此处为本机数据添加绘制代码
	if(!myImage.IsNull())
	{
		myImage.Draw(pDC->m_hDC,0,0);
	}
}


// CImageDemoView 诊断

#ifdef _DEBUG
void CImageDemoView::AssertValid() const
{
	CView::AssertValid();
}

void CImageDemoView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CImageDemoDoc* CImageDemoView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CImageDemoDoc)));
	return (CImageDemoDoc*)m_pDocument;
}
#endif //_DEBUG


// CImageDemoView 消息处理程序

void CImageDemoView::OnFileOpen()
{
	// TODO: 在此添加命令处理程序代码
	CString strFilter;
	CSimpleArray<GUID> aguidFileTypes;
	HRESULT hResult;

	hResult=myImage.GetExporterFilterString(strFilter,aguidFileTypes,_T("所有图像文件"));
	if(FAILED(hResult))
	{
		MessageBox("GetExporterFilter调用失败");
		return;
	}
	CFileDialog dlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST,strFilter);
	if(dlg.DoModal()!=IDOK)
		return;
	myImage.Destroy();

	hResult=myImage.Load(dlg.GetFileName());
	if(FAILED(hResult))
	{
		MessageBox("打开图像文件失败");
		return;
	}

	CString str;
	str.LoadString(AFX_IDS_APP_TITLE);
	AfxGetMainWnd()->SetWindowText(str+"-"+dlg.GetFileName());
	Invalidate();
}

void CImageDemoView::OnFileSaveAs()
{
	// TODO: 在此添加命令处理程序代码
	if(myImage.IsNull())
	{
		MessageBox("无可保存的图像文件");
		return;
	}

	CString strFilter;
	strFilter="位图(*.bmp)|*.bmp|JPEG(*.jpg)|*.jpg|GIF(*.gif)|*.gif|PNG(*.png)|*.png||";
	CFileDialog dlg(FALSE,NULL,NULL,NULL,strFilter);
	if(dlg.DoModal()!=IDOK)
		return;

	CString strFileName;
	CString strExtension;

	strFileName=dlg.m_ofn.lpstrFile;
	if(dlg.m_ofn.nFileExtension==0)
	{
		switch (dlg.m_ofn.nFilterIndex)
		{
		case 1:
			strExtension="bmp";
			break;
		case 2:
			strExtension="jpg";
			break;
		case 3:
			strExtension="gif";
			break;
		case 4:
			strExtension="png";
			break;
		}
		strFileName=strFileName+'.'+strExtension;
	}
	
	HRESULT hResult=myImage.Save(strFileName);
	if(FAILED(hResult))
		MessageBox("无法保存当前图像文件");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?