www.pudn.com > spacial.rar > spacialView.cpp


// spacialView.cpp : CspacialView 类的实现 
// 
 
#include "stdafx.h" 
#include "spacial.h" 
 
#include "spacialDoc.h" 
#include "spacialView.h" 
#include ".\spacialview.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#endif 
 
 
// CspacialView 
 
IMPLEMENT_DYNCREATE(CspacialView, CScrollView) 
 
BEGIN_MESSAGE_MAP(CspacialView, CScrollView) 
	// 标准打印命令 
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview) 
	ON_COMMAND(ID__negative, Negativges) 
	 
	ON_COMMAND(ID__histeq, Histeq) 
	ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo) 
	ON_COMMAND(ID_EDIT_UNDO, OnEditUndo) 
	ON_COMMAND(ID_EDIT_PASTE, OnEditPaste) 
	ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste) 
	ON_COMMAND(ID_VIEW_ZOOMIN, OnViewZoomin) 
	ON_COMMAND(ID_VIEW_ZOOMOUT, OnViewZoomout) 
	 
	ON_COMMAND(ID_VIEW_ORIGINAL, OnViewOriginal) 
	ON_WM_LBUTTONDOWN() 
	ON_WM_MBUTTONUP() 
	ON_WM_LBUTTONUP() 
	ON_WM_MOUSEMOVE() 
	ON_COMMAND(ID_HAAR_TRANS, OnHaarTrans) 
	ON_COMMAND(ID_HAAR_INVTRANS, OnHaarInvtrans) 
END_MESSAGE_MAP() 
 
// CspacialView 构造/析构 
 
CspacialView::CspacialView() 
{ 
	// TODO: 在此处添加构造代码 
   q=0; 
} 
 
CspacialView::~CspacialView() 
{ 
} 
 
BOOL CspacialView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或 
	// 样式 
 
	return CScrollView::PreCreateWindow(cs); 
} 
 
// CspacialView 绘制 
 
void CspacialView::OnDraw(CDC* pDC) 
{ 
	CspacialDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	if (!pDoc) 
		return; 
 
	// TODO: 在此处为本机数据添加绘制代码 
	SetScrollSizes(MM_TEXT, m_sizeDraw); 
	CRect rectClient; 
	GetClientRect(&rectClient); 
 
	int x = m_sizeDraw.cx > rectClient.right ? 0 : (rectClient.right - m_sizeDraw.cx) / 2; 
	int y = m_sizeDraw.cy > rectClient.bottom ? 0 : (rectClient.bottom - m_sizeDraw.cy) / 2; 
//    int x=0; 
//	int y=0; 
	pDoc->m_dibFile.UsePalette(pDC); 
	pDoc->m_dibFile.Draw(pDC, CPoint(x,y), m_sizeDraw); 
	//pDoc->m_dibFile .Draw(pDC, CPoint(0, 0), pDoc->m_dibFile.GetDimensions()); 
} 
 
 
void CspacialView::OnInitialUpdate() 
{ 
	CScrollView::OnInitialUpdate(); 
	CSize sizeTotal; 
	 
	// TODO: 计算此视图的合计大小 
	sizeTotal = GetDocument()->GetDocumentSize(); 
	m_sizeDraw = sizeTotal; 
	SetScrollSizes(MM_TEXT, m_sizeDraw); 
	 
 
} 
 
 
// CspacialView 打印 
 
BOOL CspacialView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
	// 默认准备 
	return DoPreparePrinting(pInfo); 
} 
 
void CspacialView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: 打印前添加额外的初始化 
} 
 
void CspacialView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: 打印后添加清除过程 
} 
 
 
// CspacialView 诊断 
 
#ifdef _DEBUG 
void CspacialView::AssertValid() const 
{ 
	CScrollView::AssertValid(); 
} 
 
void CspacialView::Dump(CDumpContext& dc) const 
{ 
	CScrollView::Dump(dc); 
} 
 
CspacialDoc* CspacialView::GetDocument() const // 非调试版本是内联的 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CspacialDoc))); 
	return (CspacialDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
 
// CspacialView 消息处理程序 
 
void CspacialView::Negativges() 
{ 
	// TODO: 在此添加命令处理程序代码 
	GetDocument()->m_dibFile.InverseHaar(); 
	Invalidate(); 
 
} 
 
/*void CspacialView::GamaTrans( double r) 
{ 
	// TODO: 在此添加命令处理程序代码 
   GetDocument()->m_dibFile.GamaTrans( r); 
   Invalidate(); 
 
}*/ 
 
void CspacialView::Histeq() 
{ 
	// TODO: 在此添加命令处理程序代码 
	 
	GetDocument()->m_dibFile.Haar(); 
	m_sizeDraw = GetDocument()->GetDocumentSize(); 
  Invalidate(); 
} 
 
void CspacialView::OnUpdateEditUndo(CCmdUI *pCmdUI) 
{ 
	// TODO: 在此添加命令更新用户界面处理程序代码 
	pCmdUI->Enable (); 
} 
 
void CspacialView::OnEditUndo() 
{ 
	// TODO: 在此添加命令处理程序代码 
	GetDocument()->m_dibFile.Negatives(); 
} 
 
void CspacialView::OnEditPaste() 
{ 
	// TODO: 在此添加命令处理程序代码 
  
	 
} 
 
void CspacialView::OnUpdateEditPaste(CCmdUI *pCmdUI) 
{ 
	// TODO: 在此添加命令更新用户界面处理程序代码 
	pCmdUI->Enable (); 
} 
 
void CspacialView::OnViewZoomin() 
{ 
	// TODO: 在此添加命令处理程序代码 
	m_sizeDraw.cx *= 1.4; 
	m_sizeDraw.cy *= 1.4; 
	Invalidate(); 
} 
 
void CspacialView::OnViewZoomout() 
{ 
	// TODO: 在此添加命令处理程序代码 
	m_sizeDraw.cx *= 0.8; 
	m_sizeDraw.cy *= 0.8; 
	Invalidate(); 
} 
 
 
void CspacialView::OnViewOriginal() 
{ 
	// TODO: 在此添加命令处理程序代码 
	m_sizeDraw = GetDocument()->GetDocumentSize(); 
	Invalidate(); 
} 
 
void CspacialView::OnLButtonDown(UINT nFlags, CPoint point) 
{ 
	// TODO: 在此添加消息处理程序代码和/或调用默认值 
    origin=point; 
	q=1; 
	CScrollView::OnLButtonDown(nFlags, point); 
} 
 
void CspacialView::OnMButtonUp(UINT nFlags, CPoint point) 
{ 
	// TODO: 在此添加消息处理程序代码和/或调用默认值 
 
} 
 
void CspacialView::OnLButtonUp(UINT nFlags, CPoint point) 
{ 
	 
	now=point; 
	q=0; 
    CClientDC dc(this); 
	CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); 
	CBrush *pOld=dc.SelectObject(pBrush); 
	dc.Rectangle(origin.x,origin.y,now.x,now.y); 
	Sleep(500); 
		CRect rectClient; 
	GetClientRect(&rectClient); 
 
	int x = m_sizeDraw.cx > rectClient.right ? 0 : (rectClient.right - m_sizeDraw.cx) / 2; 
	int y = m_sizeDraw.cy > rectClient.bottom ? 0 : (rectClient.bottom - m_sizeDraw.cy) / 2; 
	origin.x-=x; 
	origin.y-=y; 
	now.x-=x; 
	now.y-=y; 
	GetDocument()->m_dibFile.InverseHaar(origin,now); 
	Invalidate(); 
	origin=0; 
	now=0; 
	// TODO: 在此添加消息处理程序代码和/或调用默认值 
 
	CScrollView::OnLButtonUp(nFlags, point); 
} 
 
void CspacialView::OnMouseMove(UINT nFlags, CPoint point) 
{ 
	// TODO: 在此添加消息处理程序代码和/或调用默认值 
	 
	if(q==1) 
	{ 
	 
	} 
	CScrollView::OnMouseMove(nFlags, point); 
 
} 
 
void CspacialView::OnHaarTrans() 
{ 
	// TODO: 在此添加命令处理程序代码 
	GetDocument()->m_dibFile.Haar(); 
	Invalidate(); 
} 
 
void CspacialView::OnHaarInvtrans() 
{ 
	// TODO: 在此添加命令处理程序代码 
	GetDocument()->m_dibFile.InverseHaar(origin,now); 
	Invalidate(); 
	 
}