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();
}