📄 vcimageview.cpp
字号:
// VCIMAGE -- 演示程序
// 华东理工大学信息学院 陆宗骐 编制
// 2003.07.15
// VCImageView.cpp : implementation of the CVCImageView class
//
#include "stdafx.h"
#include "VCImage.h"
#include "VCImageDoc.h"
#include "VCImageView.h"
#include "CDib_VC.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVCImageView
IMPLEMENT_DYNCREATE(CVCImageView, CScrollView)
BEGIN_MESSAGE_MAP(CVCImageView, CScrollView)
//{{AFX_MSG_MAP(CVCImageView)
ON_COMMAND(ID_FILE_REFRESH, OnFileRefresh)
ON_COMMAND(ID_INVERT, OnInvert)
ON_COMMAND(ID_COLORTOGRAY, OnColorToGray)
ON_COMMAND(ID_FLIP_HORZONTAL,OnFlipHorzontal)
ON_COMMAND(ID_FLIP_VERTICAL,OnFlipVertical)
ON_COMMAND(ID_ROTATE_15,OnRotate15)
ON_COMMAND(ID_ROTATE_30,OnRotate30)
ON_COMMAND(ID_ROTATE_45,OnRotate45)
ON_COMMAND(ID_ROTATE_60,OnRotate60)
ON_COMMAND(ID_ROTATE_75,OnRotate75)
ON_COMMAND(ID_ROTATE_90,OnRotate90)
ON_COMMAND(ID_ROTATE_180,OnRotate180)
ON_COMMAND(ID_ROTATE_270,OnRotate270)
ON_COMMAND(ID_RED,OnRed)
ON_COMMAND(ID_GREEN,OnGreen)
ON_COMMAND(ID_BLUE,OnBlue)
ON_COMMAND(ID_YELLOW,OnYellow)
ON_COMMAND(ID_CYAN,OnCyan)
ON_COMMAND(ID_MAGENTA,OnMagenta)
ON_COMMAND(ID_ZOOMIN2,OnZoomIn2)
ON_COMMAND(ID_ZOOMIN3,OnZoomIn3)
ON_COMMAND(ID_ZOOMOUT2,OnZoomOut2)
ON_COMMAND(ID_ZOOMOUT3,OnZoomOut3)
ON_COMMAND(ID_SCALE60,OnScale60)
ON_COMMAND(ID_SCALE80,OnScale80)
ON_COMMAND(ID_SCALE120,OnScale120)
ON_COMMAND(ID_SCALE150,OnScale150)
ON_COMMAND(ID_SCALE180,OnScale180)
ON_COMMAND(ID_CAPTURE, OnCapture)
ON_COMMAND(ID_SINGLECAPTO, OnSingleCapto)
ON_COMMAND(ID_RECTANGLE,Rectangle)
ON_COMMAND(ID_SKETCH,Sketch)
ON_COMMAND(ID_ONCUT,OnCut)
ON_COMMAND(ID_ONMOVE,OnMove)
ON_WM_SIZE()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CVCImageView construction/destruction
CVCImageView::CVCImageView()
{
// TODO: add construction code here
}
CVCImageView::~CVCImageView()
{
}
BOOL CVCImageView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CVCImageView drawing
void CVCImageView::OnDraw(CDC* pDC)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Draw(pDC);
}
/////////////////////////////////////////////////////////////////////////////
// CVCImageView diagnostics
#ifdef _DEBUG
void CVCImageView::AssertValid() const
{
CScrollView::AssertValid();
}
void CVCImageView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CVCImageDoc* CVCImageView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CVCImageDoc)));
return (CVCImageDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CVCImageView message handlers
void CVCImageView::OnInitialUpdate()
{
SIZE size={1500,1200};
SetScrollSizes(MM_TEXT,size);
CScrollView::OnInitialUpdate();
}
void CVCImageView::OnFileRefresh()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Refresh();
Invalidate();
}
void CVCImageView::OnInvert()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Invert();
Invalidate();
}
void CVCImageView::OnColorToGray()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.ColorToGray();
Invalidate();
}
void CVCImageView::OnFlipHorzontal()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.FlipHorzontal();
Invalidate();
}
void CVCImageView::OnFlipVertical()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.FlipVertical();
Invalidate();
}
void CVCImageView::OnRotate180()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Rotate180();
Invalidate();
}
void CVCImageView::OnRotate90()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Rotate90();
Invalidate();
}
void CVCImageView::OnRotate270()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Rotate270();
Invalidate();
}
void CVCImageView::OnRotate15()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Rotate15();
Invalidate();
}
void CVCImageView::OnRotate30()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Rotate30();
Invalidate();
}
void CVCImageView::OnRotate45()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Rotate45();
Invalidate();
}
void CVCImageView::OnRotate60()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Rotate60();
Invalidate();
}
void CVCImageView::OnRotate75()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Rotate75();
Invalidate();
}
void CVCImageView::OnRed(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Color(0);
Invalidate();
}
void CVCImageView::OnGreen(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Color(1);
Invalidate();
}
void CVCImageView::OnBlue(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Color(2);
Invalidate();
}
void CVCImageView::OnYellow(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Color(3);
Invalidate();
}
void CVCImageView::OnCyan(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Color(4);
Invalidate();
}
void CVCImageView::OnMagenta(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Color(5);
Invalidate();
}
void CVCImageView::OnZoomIn2(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.ZoomIn(2);
Invalidate();
}
void CVCImageView::OnZoomIn3(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.ZoomIn(3);
Invalidate();
}
void CVCImageView::OnZoomOut2(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.ZoomOut(2);
Invalidate();
}
void CVCImageView::OnZoomOut3(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.ZoomOut(3);
Invalidate();
}
void CVCImageView::OnScale60(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Scale(0.6);
Invalidate();
}
void CVCImageView::OnScale80(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Scale(0.8);
Invalidate();
}
void CVCImageView::OnScale120(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Scale(1.2);
Invalidate();
}
void CVCImageView::OnScale150(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Scale(1.5);
Invalidate();
}
void CVCImageView::OnScale180(void)
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.Scale(1.8);
Invalidate();
}
void CVCImageView::OnCapture()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.OkCapture(m_hWnd);
}
void CVCImageView::OnSingleCapto()
{
CVCImageDoc* pDoc = GetDocument();
pDoc->m_Process.SingleCapto(m_hWnd);
Invalidate();
}
//---------------------------------------------
BOOL CVCImageView::PointInDib(int x,int y)
{
CVCImageDoc* pDoc = GetDocument();
return(pDoc->m_Process.PointInDib(x,y));
}
void CVCImageView::Rectangle(void)
{
CVCImageDoc* pDoc = GetDocument();
if (pDoc->m_Process.GetPDib(0)==NULL) return;
pDoc->m_Process.Refresh();
rect_n=0;
area_n=0;
area_flag=0;
rect_flag=1;
Invalidate();
}
void CVCImageView::Sketch(void)
{
CVCImageDoc* pDoc = GetDocument();
if (pDoc->m_Process.GetPDib(0)==NULL) return;
pDoc->m_Process.Refresh();
rect_n=0;
area_n=0;
rect_flag=0;
area_flag=1;
Invalidate();
}
void CVCImageView::OnCut(void)
{
int i,j,k,s,bpp,maxn;
CDIB *pdib2,*pdib1;
BYTE buf2[8192],*cp,*p0,*p1;
DWORD dd;
int max,r,g,b,gray;
CVCImageDoc* pDoc = GetDocument();
if (pDoc->m_Process.GetPDib(0)==NULL) return;
p0=pDoc->m_Process.GetPDib(0);
p1=pDoc->m_Process.GetPDib(1);
if (p1!=NULL) {
pdib2= new CDIB(p1);
bpp=pdib2->bpp;
pdib1= new CDIB(p0);
if (bpp==1) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -