📄 imageview.cpp
字号:
// ImageView.cpp : implementation of the CImageView class
//
#include "stdafx.h"
#include "Image.h"
#include "ImageDoc.h"
#include "ImageView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CImageView
IMPLEMENT_DYNCREATE(CImageView, CView)
BEGIN_MESSAGE_MAP(CImageView, CView)
//{{AFX_MSG_MAP(CImageView)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_ERASEBKGND()
ON_COMMAND(ID_OPENONEC, OnOpen1C)
ON_COMMAND(ID_OPENTWOC, OnOpen2C)
ON_COMMAND(ID_OPENTHREEC, OnOpen3C)
ON_COMMAND(ID_OPENFOURC, OnOpen4C)
ON_COMMAND(ID_UNIE, OnUnie)
ON_COMMAND(ID_UNDO, OnUndo)
ON_COMMAND(ID_SAVE, OnSave)
ON_WM_KEYDOWN()
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_NEW, OnNew)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CImageView construction/destruction
CImageView::CImageView()
{
m_sPath1="";
m_nWidth1=0;
m_nHeight1=0;
m_nX1=0;
m_nY1=0;
m_bCanMove1=false;
m_sPath2="";
m_nWidth2=0;
m_nHeight2=0;
m_nX2=0;
m_nY2=0;
m_bCanMove2=false;
m_sPath3="";
m_nWidth3=0;
m_nHeight3=0;
m_nX3=0;
m_nY3=0;
m_bCanMove3=false;
m_sPath4="";
m_nWidth4=0;
m_nHeight4=0;
m_nX4=0;
m_nY4=0;
m_bCanMove4=false;
m_dwRop=SRCINVERT;
m_nID=0;
}
CImageView::~CImageView()
{
if(m_sPath1!="")
::DeleteDC(hMemDC1);
if(m_sPath2!="")
::DeleteDC(hMemDC2);
if(m_sPath3!="")
::DeleteDC(hMemDC3);
if(m_sPath4!="")
::DeleteDC(hMemDC4);
}
BOOL CImageView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CImageView drawing
void CImageView::OnDraw(CDC* pDC)
{
CImageDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(m_sPath1!="")
::BitBlt(pDC->m_hDC,m_nX1,m_nY1,m_nWidth1,m_nHeight1,hMemDC1,0,0,m_dwRop);
if(m_sPath2!="")
::BitBlt(pDC->m_hDC,m_nX2,m_nY2,m_nWidth2,m_nHeight2,hMemDC2,0,0,m_dwRop);
if(m_sPath3!="")
::BitBlt(pDC->m_hDC,m_nX3,m_nY3,m_nWidth3,m_nHeight3,hMemDC3,0,0,m_dwRop);
if(m_sPath4!="")
::BitBlt(pDC->m_hDC,m_nX4,m_nY4,m_nWidth4,m_nHeight4,hMemDC4,0,0,m_dwRop);
}
/////////////////////////////////////////////////////////////////////////////
// CImageView diagnostics
#ifdef _DEBUG
void CImageView::AssertValid() const
{
CView::AssertValid();
}
void CImageView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CImageDoc* CImageView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CImageDoc)));
return (CImageDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CImageView message handlers
BOOL CImageView::OnEraseBkgnd(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);
pDC->PatBlt(0,0,rect.Width(),rect.Height(), BLACKNESS);
return TRUE;
}
void CImageView::OnOpen1C()
{
CFileDialog dlg(TRUE,"bmp","*.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"BMP位图文件(*.bmp)|*.bmp||",NULL);
if(dlg.DoModal()==IDOK)
{
m_sPath1=dlg.GetPathName();
CFile file;
file.Open(m_sPath1,CFile::modeReadWrite);
unsigned char a[1],b[1];
file.Seek(18,CFile::begin);
file.Read(b,1);
file.Read(a,1);
m_nWidth1=a[0]*256+b[0];
file.Seek(22,CFile::begin);
file.Read(b,1);
file.Read(a,1);
m_nHeight1=a[0]*256+b[0];
file.Close();
HBITMAP hbitmap;
hbitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_sPath1,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hMemDC1=::CreateCompatibleDC(NULL);
SelectObject(hMemDC1,hbitmap);
::DeleteObject(hbitmap);
Invalidate();
}
}
void CImageView::OnOpen2C()
{
CFileDialog dlg(TRUE,"bmp","*.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"BMP位图文件(*.bmp)|*.bmp||",NULL);
if(dlg.DoModal()==IDOK)
{
m_sPath2=dlg.GetPathName();
CFile file;
file.Open(m_sPath2,CFile::modeReadWrite);
unsigned char a[1],b[1];
file.Seek(18,CFile::begin);
file.Read(b,1);
file.Read(a,1);
m_nWidth2=a[0]*256+b[0];
file.Seek(22,CFile::begin);
file.Read(b,1);
file.Read(a,1);
m_nHeight2=a[0]*256+b[0];
file.Close();
HBITMAP hbitmap;
hbitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_sPath2,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hMemDC2=::CreateCompatibleDC(NULL);
SelectObject(hMemDC2,hbitmap);
::DeleteObject(hbitmap);
Invalidate();
}
}
void CImageView::OnOpen3C()
{
CFileDialog dlg(TRUE,"bmp","*.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"BMP位图文件(*.bmp)|*.bmp||",NULL);
if(dlg.DoModal()==IDOK)
{
m_sPath3=dlg.GetPathName();
CFile file;
file.Open(m_sPath3,CFile::modeReadWrite);
unsigned char a[1],b[1];
file.Seek(18,CFile::begin);
file.Read(b,1);
file.Read(a,1);
m_nWidth3=a[0]*256+b[0];
file.Seek(22,CFile::begin);
file.Read(b,1);
file.Read(a,1);
m_nHeight3=a[0]*256+b[0];
file.Close();
HBITMAP hbitmap;
hbitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_sPath3,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hMemDC3=::CreateCompatibleDC(NULL);
SelectObject(hMemDC3,hbitmap);
::DeleteObject(hbitmap);
Invalidate();
}
}
void CImageView::OnOpen4C()
{
CFileDialog dlg(TRUE,"bmp","*.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"BMP位图文件(*.bmp)|*.bmp||",NULL);
if(dlg.DoModal()==IDOK)
{
m_sPath4=dlg.GetPathName();
CFile file;
file.Open(m_sPath4,CFile::modeReadWrite);
unsigned char a[1],b[1];
file.Seek(18,CFile::begin);
file.Read(b,1);
file.Read(a,1);
m_nWidth4=a[0]*256+b[0];
file.Seek(22,CFile::begin);
file.Read(b,1);
file.Read(a,1);
m_nHeight4=a[0]*256+b[0];
file.Close();
HBITMAP hbitmap;
hbitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_sPath4,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hMemDC4=::CreateCompatibleDC(NULL);
SelectObject(hMemDC4,hbitmap);
::DeleteObject(hbitmap);
Invalidate();
}
}
void CImageView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
if(point.x<m_nX1+m_nWidth1 && point.y<m_nY1+m_nHeight1 && point.x>m_nX1 && point.y>m_nY1)
m_nID=1;
if(point.x<m_nX2+m_nWidth2 && point.y<m_nY2+m_nHeight2 && point.x>m_nX2 && point.y>m_nY2)
m_nID=2;
if(point.x<m_nX3+m_nWidth3 && point.y<m_nY3+m_nHeight3 && point.x>m_nX3 && point.y>m_nY3)
m_nID=3;
if(point.x<m_nX4+m_nWidth4 && point.y<m_nY4+m_nHeight4 && point.x>m_nX4 && point.y>m_nY4)
m_nID=4;
CView::OnLButtonDblClk(nFlags, point);
}
void CImageView::OnLButtonDown(UINT nFlags, CPoint point)
{
if(point.x<m_nX4+m_nWidth4 && point.y<m_nY4+m_nHeight4 && point.x>m_nX4 && point.y>m_nY4 && m_bCanMove1==false && m_bCanMove2==false && m_bCanMove3==false)
m_bCanMove4=true;
if(point.x<m_nX3+m_nWidth3 && point.y<m_nY3+m_nHeight3 && point.x>m_nX3 && point.y>m_nY3 && m_bCanMove1==false && m_bCanMove2==false && m_bCanMove4==false)
m_bCanMove3=true;
if(point.x<m_nX2+m_nWidth2 && point.y<m_nY2+m_nHeight2 && point.x>m_nX2 && point.y>m_nY2 && m_bCanMove1==false && m_bCanMove3==false && m_bCanMove4==false)
m_bCanMove2=true;
if(point.x<m_nX1+m_nWidth1 && point.y<m_nY1+m_nHeight1 && point.x>m_nX1 && point.y>m_nY1 && m_bCanMove2==false && m_bCanMove3==false && m_bCanMove4==false)
m_bCanMove1=true;
CView::OnLButtonDown(nFlags, point);
}
void CImageView::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_bCanMove1==true)
{
int dx=m_nOldX1-m_nX1;
int dy=m_nOldY1-m_nY1;
m_nX1=point.x-dx;
m_nY1=point.y-dy;
Invalidate();
}
if(m_bCanMove2==true)
{
int dx=m_nOldX2-m_nX2;
int dy=m_nOldY2-m_nY2;
m_nX2=point.x-dx;
m_nY2=point.y-dy;
Invalidate();
}
if(m_bCanMove3==true)
{
int dx=m_nOldX3-m_nX3;
int dy=m_nOldY3-m_nY3;
m_nX3=point.x-dx;
m_nY3=point.y-dy;
Invalidate();
}
if(m_bCanMove4==true)
{
int dx=m_nOldX4-m_nX4;
int dy=m_nOldY4-m_nY4;
m_nX4=point.x-dx;
m_nY4=point.y-dy;
Invalidate();
}
m_nOldX1=m_nOldX2=m_nOldX3=m_nOldX4=point.x;
m_nOldY1=m_nOldY2=m_nOldY3=m_nOldY4=point.y;
CView::OnMouseMove(nFlags, point);
}
void CImageView::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bCanMove1=false;
m_bCanMove2=false;
m_bCanMove3=false;
m_bCanMove4=false;
CView::OnLButtonUp(nFlags, point);
}
void CImageView::OnUnie()
{
m_dwRop=SRCPAINT;
Invalidate();
}
void CImageView::OnUndo()
{
m_dwRop=SRCINVERT;
Invalidate();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -