⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 epicbookview.cpp

📁 电子相册程序,实现图片的浏览,放大缩小等动能!evc4.0下编译通过!
💻 CPP
字号:
// EPicBookView.cpp : implementation of the CEPicBookView class
//

#include "stdafx.h"
#include "EPicBook.h"

#include "EPicBookDoc.h"
#include "EPicBookView.h"
#include "DirDialog.h"
#include "MyPicWnd.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define CHECK_BUT       RGB(255, 255, 255)//RGB(172,228, 255)//RGB(211,215, 220)
#define BK_CORLOR       RGB(255, 255, 255)
#define BT_SIZE         26
#define BT_RIGHT_DIS    10
#define BT_TOP_DIS      10
#define BT_BOTTOM_DIS   80
#define BT_LEFT_DIS      80
#define PIC_VIEW_TOP_DIS 60
#define BT_INVA_DIS      5
/////////////////////////////////////////////////////////////////////////////
// CEPicBookView

IMPLEMENT_DYNCREATE(CEPicBookView, CView)

BEGIN_MESSAGE_MAP(CEPicBookView, CView)
	//{{AFX_MSG_MAP(CEPicBookView)
	ON_WM_PAINT()
	ON_COMMAND(ID_MENUITEM32771, OnMenuitem32771)
	ON_WM_LBUTTONUP()
	ON_BN_CLICKED(IDB_BT1, OnBTDown)
	ON_BN_CLICKED(IDB_BT2, OnBTUp)
	ON_BN_CLICKED(IDB_BT5, OnBTSigW)
	ON_BN_CLICKED(IDB_BT6, OnBTSigH)
	ON_BN_CLICKED(IDB_BT7, OnBTDoubLR)
	ON_BN_CLICKED(IDB_BT8, OnBTDoubUD)
	ON_BN_CLICKED(IDB_BT4, OnBTNext)
	ON_BN_CLICKED(IDB_BT3, OnBTPrev)
	ON_BN_CLICKED(IDB_BT9, OnBTDoPack)
	ON_WM_LBUTTONDBLCLK()
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CEPicBookView construction/destruction

CEPicBookView::CEPicBookView()
{
	// TODO: add construction code here
	m_PhotoPane = new CMyPicWnd;
    m_bkBrush.CreateSolidBrush(BK_CORLOR);
}

CEPicBookView::~CEPicBookView()
{
	delete m_PhotoPane;
	m_bkBrush.DeleteObject();
}

BOOL CEPicBookView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CEPicBookView drawing

void CEPicBookView::OnDraw(CDC* pDC)
{
	CEPicBookDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CEPicBookView printing

BOOL CEPicBookView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CEPicBookView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CEPicBookView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CEPicBookView diagnostics

#ifdef _DEBUG
void CEPicBookView::AssertValid() const
{
	CView::AssertValid();
}

void CEPicBookView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CEPicBookDoc* CEPicBookView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEPicBookDoc)));
	return (CEPicBookDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CEPicBookView message handlers

void CEPicBookView::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
	AfxGetMainWnd()->GetClientRect(&m_clientRect);
	// TODO: Add your specialized code here and/or call the base class
	
	//
	m_PhotoView.Create(WS_VISIBLE|WS_CHILD, CRect(m_clientRect.Width()*2/3 + 5, PIC_VIEW_TOP_DIS, m_clientRect.Width(), m_clientRect.Height() - BT_SIZE - BT_TOP_DIS - 10*4), this, IDC_WND1);
    m_PhotoPane->Create(WS_VISIBLE|WS_CHILD, CRect(0, PIC_VIEW_TOP_DIS, m_clientRect.Width()*2/3 - 10, m_clientRect.Height() - BT_BOTTOM_DIS - 10), this, IDC_WND2);
	
	CRect btRect1(CPoint(m_clientRect.Width() - BT_RIGHT_DIS- BT_SIZE, BT_TOP_DIS), CSize(BT_SIZE, BT_SIZE));
	m_BTNext.Create(_T(""), WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, btRect1, this, IDB_BT1);
	m_BTNext.SetFont(GetFont());
    m_BTNext.SetIcon(IDI_ICON2);
	m_BTNext.SetFlat();
	m_BTNext.SetTooltipText(_T("下一页"));
	m_BTNext.SetColor(CButtonST::BTNST_COLOR_BK_OUT, BK_CORLOR);
	m_BTNext.SetColor(CButtonST::BTNST_COLOR_BK_IN, BK_CORLOR);
	m_BTNext.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, BK_CORLOR);
    
	CRect btRect2(CPoint(m_clientRect.Width() - BT_RIGHT_DIS- BT_SIZE, m_clientRect.Height() - BT_SIZE - BT_TOP_DIS*4), CSize(BT_SIZE, BT_SIZE));
	m_BTPrev.Create(_T(""), WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, btRect2, this, IDB_BT2);
	m_BTPrev.SetFont(GetFont());
    m_BTPrev.SetIcon(IDI_ICON1);
	m_BTPrev.SetTooltipText(_T("上一页"));
	m_BTPrev.SetFlat();
	m_BTPrev.SetColor(CButtonST::BTNST_COLOR_BK_OUT, BK_CORLOR);
	m_BTPrev.SetColor(CButtonST::BTNST_COLOR_BK_IN, BK_CORLOR);
	m_BTPrev.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, BK_CORLOR);

	CRect btRect3(CPoint(BT_RIGHT_DIS, BT_TOP_DIS*3), CSize(BT_SIZE, BT_SIZE));
	m_BTLeft.Create(_T(""), WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, btRect3, this, IDB_BT3);
	m_BTLeft.SetFont(GetFont());
    m_BTLeft.SetIcon(IDI_ICON3);
	m_BTLeft.SetTooltipText(_T("上一页"));
	m_BTLeft.SetFlat();
	m_BTLeft.SetColor(CButtonST::BTNST_COLOR_BK_OUT, BK_CORLOR);
	m_BTLeft.SetColor(CButtonST::BTNST_COLOR_BK_IN, BK_CORLOR);
	m_BTLeft.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, BK_CORLOR);
	
	CRect btRect4(CPoint(m_clientRect.Width()*2/3 - BT_RIGHT_DIS- BT_SIZE, BT_TOP_DIS*3), CSize(BT_SIZE, BT_SIZE));
	m_BTRight.Create(_T(""), WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, btRect4, this, IDB_BT4);
	m_BTRight.SetFont(GetFont());
    m_BTRight.SetIcon(IDI_ICON4);
	m_BTRight.SetFlat();
	m_BTRight.SetTooltipText(_T("下一页"));
	m_BTRight.SetColor(CButtonST::BTNST_COLOR_BK_OUT, BK_CORLOR);
	m_BTRight.SetColor(CButtonST::BTNST_COLOR_BK_IN, BK_CORLOR);
	m_BTRight.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, BK_CORLOR);

	
	CRect btRect5(CPoint(BT_LEFT_DIS, m_clientRect.Height() - BT_BOTTOM_DIS), CSize(BT_SIZE + 20, BT_SIZE + 20));
	m_BTSigWeight.Create(_T(""), WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP|BS_CHECKBOX, btRect5, this, IDB_BT5);
	m_BTSigWeight.SetFont(GetFont());
    m_BTSigWeight.SetIcon(IDI_ICON9, IDI_ICON5);
	m_BTSigWeight.SetFlat(TRUE);
	m_BTSigWeight.DrawTransparent(TRUE);
	m_BTSigWeight.DrawBorder(FALSE);
	m_BTSigWeight.SetColor(CButtonST::BTNST_COLOR_BK_OUT, CHECK_BUT);
	m_BTSigWeight.SetColor(CButtonST::BTNST_COLOR_BK_IN, CHECK_BUT);
	m_BTSigWeight.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, CHECK_BUT);
	m_BTSigWeight.SetCheck(TRUE);
	m_BTSigWeight.SetTooltipText(_T("横向单排"));

	CRect btRect6(CPoint(btRect5.left + btRect5.Width()+BT_INVA_DIS, btRect5.top), CSize(BT_SIZE + 20, BT_SIZE + 20));
	m_BTSigHight.Create(_T(""), WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP|BS_CHECKBOX, btRect6, this, IDB_BT6);
	m_BTSigHight.SetFont(GetFont());
    m_BTSigHight.SetIcon(IDI_ICON10, IDI_ICON6);
	m_BTSigHight.SetFlat(TRUE);
	m_BTSigHight.DrawTransparent(TRUE);
	m_BTSigHight.DrawBorder(FALSE);
	m_BTSigHight.SetColor(CButtonST::BTNST_COLOR_BK_OUT, CHECK_BUT);
	m_BTSigHight.SetColor(CButtonST::BTNST_COLOR_BK_IN, CHECK_BUT);
	m_BTSigHight.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, CHECK_BUT);
	m_BTSigHight.SetTooltipText(_T("竖向单排"));


	CRect btRect7(CPoint(btRect6.left + btRect5.Width()+BT_INVA_DIS, btRect5.top), CSize(BT_SIZE + 20, BT_SIZE + 20));
	m_BTDoubLR.Create(_T(""), WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP|BS_CHECKBOX, btRect7, this, IDB_BT7);
	m_BTDoubLR.SetFont(GetFont());
    m_BTDoubLR.SetIcon(IDI_ICON12, IDI_ICON8);
	m_BTDoubLR.SetFlat(TRUE);
	m_BTDoubLR.DrawTransparent(TRUE);
	m_BTDoubLR.DrawBorder(FALSE);
	m_BTDoubLR.SetColor(CButtonST::BTNST_COLOR_BK_OUT, CHECK_BUT);
	m_BTDoubLR.SetColor(CButtonST::BTNST_COLOR_BK_IN, CHECK_BUT);
	m_BTDoubLR.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, CHECK_BUT);
    m_BTDoubLR.SetTooltipText(_T("横向双排"));



	CRect btRect8(CPoint(btRect7.left + btRect5.Width()+BT_INVA_DIS, btRect5.top), CSize(BT_SIZE + 20, BT_SIZE + 20));
	m_BTDoubUD.Create(_T(""), WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP|BS_CHECKBOX, btRect8, this, IDB_BT8);
	m_BTDoubUD.SetFont(GetFont());
    m_BTDoubUD.SetIcon(IDI_ICON11, IDI_ICON7);
	m_BTDoubUD.SetFlat(TRUE);
	m_BTDoubUD.DrawTransparent(TRUE);
	m_BTDoubUD.DrawBorder(FALSE);
	m_BTDoubUD.SetColor(CButtonST::BTNST_COLOR_BK_OUT, CHECK_BUT);
	m_BTDoubUD.SetColor(CButtonST::BTNST_COLOR_BK_IN, CHECK_BUT);
	m_BTDoubUD.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, CHECK_BUT);
     m_BTDoubUD.SetTooltipText(_T("竖向双排"));
	
	CRect btRect9(CPoint(btRect8.left + 300, btRect5.top + 5), CSize(BT_SIZE + 20, BT_SIZE + 15));
	m_BTDoPack.Create(_T(""), WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, btRect9, this, IDB_BT9);
	m_BTDoPack.SetFont(GetFont());
    m_BTDoPack.SetIcon(IDI_ICON13);
	m_BTDoPack.SetFlat();
	m_BTDoPack.SetTooltipText("打包成相册");
	m_BTDoPack.SetColor(CButtonST::BTNST_COLOR_BK_OUT, BK_CORLOR);
	m_BTDoPack.SetColor(CButtonST::BTNST_COLOR_BK_IN, BK_CORLOR);
	m_BTDoPack.SetColor(CButtonST::BTNST_COLOR_BK_FOCUS, BK_CORLOR);

}

void CEPicBookView::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	dc.FillRect(m_clientRect, &m_bkBrush);
	CPen pen, *oldPen;
	pen.CreatePen(PS_SOLID, 5, RGB(98,176, 255));
	oldPen = dc.SelectObject(&pen);
	dc.MoveTo(CPoint(m_clientRect.Width()*2/3,0));
	dc.LineTo(m_clientRect.Width()*2/3, m_clientRect.Height());

	dc.MoveTo(0, m_clientRect.Height() - BT_BOTTOM_DIS - 6);
	dc.LineTo(m_clientRect.Width()*2/3, m_clientRect.Height() - BT_BOTTOM_DIS - 6);
	dc.SelectObject(oldPen);
	pen.DeleteObject();
	// Do not call CView::OnPaint() for painting messages
}

void CEPicBookView::ChangeCheckLayout(int index)
{
	switch(index)
	{
	case UPTODOWN:
		m_BTSigWeight.SetCheck(FALSE);
		m_BTSigHight.SetCheck(FALSE);
		m_BTDoubLR.SetCheck(FALSE);
		m_BTDoubUD.SetCheck(TRUE);
		break;
		
	case LEFTTORIGHT:
		m_BTSigWeight.SetCheck(FALSE);
		m_BTSigHight.SetCheck(FALSE);
		m_BTDoubLR.SetCheck(TRUE);
		m_BTDoubUD.SetCheck(FALSE);
		break;
		
	case HORIZONTAL:
		m_BTSigWeight.SetCheck(TRUE);
		m_BTSigHight.SetCheck(FALSE);
		m_BTDoubLR.SetCheck(FALSE);
		m_BTDoubUD.SetCheck(FALSE);
		break;
		
	case VIRTICAL:
		m_BTSigWeight.SetCheck(FALSE);
		m_BTSigHight.SetCheck(TRUE);
		m_BTDoubLR.SetCheck(FALSE);
		m_BTDoubUD.SetCheck(FALSE);
		break;
	default:
		break;
	}
}

void CEPicBookView::OnBTSigW()
{
	ChangeCheckLayout(HORIZONTAL);
	m_PhotoPane->ChangeLayout(HORIZONTAL);
}

void CEPicBookView::OnBTSigH()
{
	ChangeCheckLayout(VIRTICAL);
	m_PhotoPane->ChangeLayout(VIRTICAL);
}

void CEPicBookView::OnBTDoubLR()
{

	ChangeCheckLayout(LEFTTORIGHT);
	m_PhotoPane->ChangeLayout(LEFTTORIGHT);
}

void CEPicBookView::OnBTDoubUD()
{
	ChangeCheckLayout(UPTODOWN);
	m_PhotoPane->ChangeLayout(UPTODOWN);
}

void CEPicBookView::OnBTDoPack()
{
	m_PhotoPane->DoPothoBook();
}

void CEPicBookView::OnMenuitem32771() 
{
	// TODO: Add your command handler code here
	CDirDialog dlg;
	CString m_strSwiDestFile;
	dlg.m_strTitle = _T("请选择图片路径");

	//dlg.m_strSelDir = _T("g:\\学习资料\\vc资源\\DataCollection\\ctrl");

	if (dlg.DoBrowse(this)) 
	{
		m_strSwiDestFile = dlg.m_strPath;
		m_PhotoView.LoadPic(m_strSwiDestFile);
	}
}

void CEPicBookView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CPoint tmp;
	if((point.x > m_clientRect.Width()*2/3 + 5) &&(point.y > PIC_VIEW_TOP_DIS))
	{
		tmp.x = point.x - (m_clientRect.Width()*2/3 + 5);
		tmp.y = point.y - PIC_VIEW_TOP_DIS;
		m_PhotoView.LButtonUp(tmp);
	}
	
	CView::OnLButtonUp(nFlags, point);
}

void CEPicBookView::OnBTDown()
{
	m_PhotoView.OnBTDown();
}

void CEPicBookView::OnBTUp()
{
	m_PhotoView.OnBTUp();
}

void CEPicBookView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CPoint tmp;
	CString strPath;
	if((point.x > m_clientRect.Width()*2/3 + 5) &&(point.y > PIC_VIEW_TOP_DIS))
	{
		tmp.x = point.x - (m_clientRect.Width()*2/3 + 5);
		tmp.y = point.y - PIC_VIEW_TOP_DIS;
		strPath = m_PhotoView.LButtonDblClk(tmp);
		if(!strPath.IsEmpty())
		{
		  m_PhotoPane->PlacePhoto(strPath);
		}

	}
	CView::OnLButtonDblClk(nFlags, point);
}

void CEPicBookView::OnBTNext()
{
    m_PhotoPane->NextPage();
}

void CEPicBookView::OnBTPrev()
{
	m_PhotoPane->PrevPage();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -