www.pudn.com > ElectronicAlbums.rar > EPicBookView.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(); 
}