www.pudn.com > ccc22.rar > openimagefileView.cpp


// openimagefileView.cpp : implementation of the COpenimagefileView class 
// 
 
#include "stdafx.h" 
#include "openimagefile.h" 
#include "openimagefileDoc.h" 
#include "openimagefileView.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
///////////////////////////////////////////////////////////////////////////// 
// COpenimagefileView 
 
IMPLEMENT_DYNCREATE(COpenimagefileView, CView) 
 
BEGIN_MESSAGE_MAP(COpenimagefileView, CView) 
	//{{AFX_MSG_MAP(COpenimagefileView) 
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen) 
	//}}AFX_MSG_MAP 
	// Standard printing commands 
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// COpenimagefileView construction/destruction 
 
COpenimagefileView::COpenimagefileView() 
{ 
	// TODO: add construction code here 
 
} 
 
COpenimagefileView::~COpenimagefileView() 
{ 
} 
 
BOOL COpenimagefileView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// COpenimagefileView drawing 
 
void COpenimagefileView::OnDraw(CDC* pDC) 
{ 
	COpenimagefileDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	if(!IsFirstDraw) 
	{ 
	int i,j; 
	CDC * dc; 
	dc=GetDC(); 
	for(i=0;iSetPixel(j,i,RGB( 
				m_pImageData[m_orgWidth*(m_orgHeight-i)+j], 
				m_pImageData[m_orgWidth*(m_orgHeight-i)+j], 
				m_pImageData[m_orgWidth*(m_orgHeight-i)+j])); 
			} 
	 
	} 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// COpenimagefileView printing 
 
BOOL COpenimagefileView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
	// default preparation 
	return DoPreparePrinting(pInfo); 
} 
 
void COpenimagefileView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add extra initialization before printing 
} 
 
void COpenimagefileView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add cleanup after printing 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// COpenimagefileView diagnostics 
 
#ifdef _DEBUG 
void COpenimagefileView::AssertValid() const 
{ 
	CView::AssertValid(); 
} 
 
void COpenimagefileView::Dump(CDumpContext& dc) const 
{ 
	CView::Dump(dc); 
} 
 
COpenimagefileDoc* COpenimagefileView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COpenimagefileDoc))); 
	return (COpenimagefileDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// COpenimagefileView message handlers 
 
void COpenimagefileView::OnFileOpen()  
{ 
	COpenimagefileDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	CFileDialog dlg(true,NULL,NULL,OFN_OVERWRITEPROMPT,"bmp(*.bmp)|*.bmp||",NULL); 
	if(dlg.DoModal()==IDOK) 
	{ 
	 
		m_szFileName = dlg.GetFileName();  
		m_szFilePathName = dlg.GetPathName(); 
	} 
	else  
		return; 
	m_pImageData = OpenBMP(m_szFilePathName, &m_orgWidth, &m_orgHeight); 
 	IsFirstDraw=FALSE; 
	Invalidate(TRUE);	 
} 
 
 
BYTE * COpenimagefileView::OpenBMP(CString fileName, long *width, long *height) 
{ 
	BYTE * pData; 
	*width = 0; 
	*height = 0; 
	if(fileName=="") 
		return NULL; 
	BITMAPINFO bmpInfo; 
	BITMAPFILEHEADER bmpFileHead; 
	CFile file; 
	if((file.Open(fileName,CFile::modeRead|CFile::shareDenyNone))==NULL) 
	{ 
		AfxMessageBox("Can not open the file"); 
		return NULL; 
	}  
	file.Read(&bmpFileHead,sizeof(BITMAPFILEHEADER)); 
	file.Read(&bmpInfo,sizeof(BITMAPINFOHEADER)); 
	*width = bmpInfo.bmiHeader.biWidth; 
 	*height = bmpInfo.bmiHeader.biHeight; 
	long lFileSize = bmpFileHead.bfSize - bmpFileHead.bfOffBits; 
	pData = (BYTE*)new char[lFileSize]; 
	if(!pData) 
		return NULL; 
 	file.ReadHuge(pData,lFileSize); 
	file.Close(); 
 	return pData; 
}