// PreviewDlg.cpp : implementation file // #include "stdafx.h" #include "ylgl.h" #include "PreviewDlg.h" #include "ShowPic22.h" #ifdef _DEBUG //#define new DEBUG_NEW //wangwenbin modify 2014-04-27 #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern Bitmap *g_pImgStaBuf; ///////////////////////////////////////////////////////////////////////////// // PreviewDlg dialog PreviewDlg::PreviewDlg(CWnd* pParent) : CDialog(PreviewDlg::IDD, pParent) { g_pBlackBrush=new SolidBrush(Color(255,0,0,0)); g_pRedBrush=new SolidBrush(Color(255,255,0,0)); m_bMin=1; m_pos=0; m_npages=0; m_ncurpage=0; } void PreviewDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(PreviewDlg, CDialog) ON_WM_DESTROY() ON_WM_ERASEBKGND() ON_WM_LBUTTONDOWN() END_MESSAGE_MAP() BOOL PreviewDlg::OnEraseBkgnd(CDC* pDC) { CRect rc; GetClientRect (rc); pDC->FillSolidRect (rc, RGB(0,0,0)); return 1; } BOOL PreviewDlg::OnInitDialog() { CDialog::OnInitDialog(); return TRUE; } void PreviewDlg::InitCtrl() { CString path,path2,str; int pos; int i = 0; for( i=0; iGetSize (); i++) { path=m_pPathArray->ElementAt(i); pos=path.ReverseFind('\\'); str=path.Right(path.GetLength()-pos-1); str.TrimLeft("m"); m_patharray.Add(path.Left(pos)+"\\s"+str); } m_pPathArray=&m_patharray; if(m_pPathArray->GetSize ()%7==0) m_npages=m_pPathArray->GetSize ()/7; else m_npages=m_pPathArray->GetSize ()/7+1; CRect rc; GetWindowRect(rc); int wid=rc.Width (); int hei=rc.Height (); CRect rc2; rc2.left =25; rc2.right =wid-5; rc2.top =30; int pichei=(hei-6*5-rc2.top*2)/7; int dt=pichei+5; rc2.bottom =rc2.top +pichei; for( i=0; i<7; i++) { m_picctrl[i].Create(_T(""), WS_VISIBLE|WS_CHILD|SS_BITMAP, rc2, this); rc2.top +=dt; rc2.bottom +=dt; /* if(m_pPathArray->GetSize()>i) { path=m_pPathArray->ElementAt(i); m_picctrl[i].SetPicPath(path); }*/ } rc.left=10; rc.right=rc.left+10; rc.top=10; rc.bottom=25; m_link1.Create ("¡Ä", WS_CHILD|WS_VISIBLE, rc, this, 100);//¡Å m_link1.PositionWindow(); m_link1.GetWindowRect (rc);ScreenToClient(rc); dt=wid/2-rc.left-rc.Width()/2+10; rc.left +=dt; rc.right +=dt; m_link1.MoveWindow(rc); rc.bottom=hei-5; rc.top=hei-25; m_link2.Create ("¡Å", WS_CHILD|WS_VISIBLE, rc, this, 100); m_link2.PositionWindow(); //////////////// rc.left=5; rc.right=rc.left+10; rc.top=0; rc.bottom=hei; m_link3.Create ("£¼", WS_CHILD|WS_VISIBLE, rc, this, 100);//£¾ m_link3.PositionWindow(); m_link3.GetWindowRect (rc);ScreenToClient(rc); dt=hei/2-rc.top-rc.Height()/2; rc.top +=dt; rc.bottom +=dt; m_link3.MoveWindow(rc); m_link1.m_bBlackBk=1; m_link2.m_bBlackBk=1; m_link3.m_bBlackBk=1; ////////////////////////////////////////////////////////// // CRect rc; GetClientRect(rc); CRgn rgn1, rgn2, rgn3; rgn1.CreateRectRgn (0,0, rc.Width (), rc.Height ()); // rgn2.CreateRectRgn (0,0, 10, 10); // rgn3. CreateEllipticRgn(0,0,20,20); // rgn2.CombineRgn (&rgn2, &rgn3, RGN_DIFF); m_link1.GetWindowRect (rc); ScreenToClient(rc); rgn2.CreateRectRgn (rc.left,rc.top, rc.right, rc.bottom); rgn1.CombineRgn (&rgn1, &rgn2, RGN_DIFF); rgn2.DeleteObject (); m_link2.GetWindowRect (rc); ScreenToClient(rc); rgn2.CreateRectRgn (rc.left,rc.top, rc.right, rc.bottom); rgn1.CombineRgn (&rgn1, &rgn2, RGN_DIFF); rgn2.DeleteObject (); m_link3.GetWindowRect (rc); ScreenToClient(rc); rgn2.CreateRectRgn (rc.left,rc.top, rc.right, rc.bottom); rgn1.CombineRgn (&rgn1, &rgn2, RGN_DIFF); rgn2.DeleteObject (); for( i=0; i<7; i++) { m_picctrl[i].GetWindowRect (rc); ScreenToClient(rc); rgn2.CreateRectRgn (rc.left,rc.top, rc.right, rc.bottom); rgn1.CombineRgn (&rgn1, &rgn2, RGN_DIFF); rgn2.DeleteObject (); } GetClientRect(rc); rgn2.CreateRectRgn (0,0, rc.Width (), rc.Height ()); rgn2.CombineRgn (&rgn2, &rgn1, RGN_DIFF); rgn1.DeleteObject (); ::SetWindowRgn (m_hWnd, rgn2, 0); } void PreviewDlg::OnDestroy() { CDialog::OnDestroy(); delete g_pBlackBrush; delete g_pRedBrush; if(g_pImgStaBuf)delete g_pImgStaBuf;g_pImgStaBuf=NULL; } void PreviewDlg::ShowMin() { m_bMin=1; m_link3.SetWindowText ("£¼"); CRect rc; rc.top =50; rc.bottom =g_screenhei-50; rc.right =g_screenwid-10; rc.left =rc.right -100; /////////////////////////// rc.left=g_screenwid-20; rc.right=rc.left+100; /////////////////////////// MoveWindow (rc); } void PreviewDlg::ShowNormal() { if(((ShowPic22*)GetParent())->m_bauto) { return; } m_bMin=0; m_link3.SetWindowText ("£¾"); CRect rc; rc.top =50; rc.bottom =g_screenhei-50; rc.right =g_screenwid-10; rc.left =rc.right -100; /////////////////////////// // rc.left=g_screenwid-20; // rc.right=rc.left+100; /////////////////////////// MoveWindow (rc); ShowPic(((ShowPic22*)GetParent())->m_nCurImgPos); } void PreviewDlg::LinkClick(CString str) { if(str=="£¼") { ShowNormal(); } else if(str=="£¾") { ShowMin(); } else if(str=="¡Ä") { PrePage(); } else if(str=="¡Å") { NextPage(); } } void PreviewDlg::ShowPic(int pos) { if(m_bMin)return; CString path; m_pos=pos; m_ncurpage=pos/7; for(int i=0; i<7; i++) { if(m_pos%7==i) { m_picctrl[i].m_nFrameMode=100; } else m_picctrl[i].m_nFrameMode=0; pos=m_ncurpage*7+i; if(m_pPathArray->GetSize()>pos) { path=m_pPathArray->ElementAt(pos); m_picctrl[i].SetPicPath(path); } else m_picctrl[i].SetPicPath(""); } } void PreviewDlg::ShowPic2() { CString path; m_pos=m_ncurpage*7; for(int i=0; i<7; i++) { if(m_pos%7==i) { m_picctrl[i].m_nFrameMode=100; } else m_picctrl[i].m_nFrameMode=0; int pos=m_ncurpage*7+i; if(m_pPathArray->GetSize()>pos) { path=m_pPathArray->ElementAt(pos); m_picctrl[i].SetPicPath(path); } else m_picctrl[i].SetPicPath(""); } } void PreviewDlg::PrePage() { try { if(m_ncurpage==0) m_ncurpage=m_npages-1; else m_ncurpage--; ShowPic2(); } catch(...) { } } void PreviewDlg::NextPage() { try { if(m_ncurpage==m_npages-1) m_ncurpage=0; else m_ncurpage++; ShowPic2(); } catch(...) { } } void PreviewDlg::OnLButtonDown(UINT nFlags, CPoint point) { CRect rc; for(int i=0; i<7; i++) { m_picctrl[i].GetWindowRect(rc); ScreenToClient(rc); if(rc.PtInRect (point)) { int pos=m_ncurpage*7+i; if(m_pPathArray->GetSize()>pos) { // ShowPic(pos); int oldpos=m_pos; m_pos=pos; for(int i=0; i<7; i++) { if(m_pos%7==i) { m_picctrl[i].m_nFrameMode=100; m_picctrl[i].Invalidate(); } else if(oldpos%7==i) { m_picctrl[i].m_nFrameMode=0; m_picctrl[i].Invalidate(); } } ((ShowPic22*)GetParent())->m_nCurImgPos = m_pos-1; ((ShowPic22*)GetParent())->Next(); } break; } } CDialog::OnLButtonDown(nFlags, point); }