PreviewDlg.cpp 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. // PreviewDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ylgl.h"
  5. #include "PreviewDlg.h"
  6. #include "ShowPic22.h"
  7. #ifdef _DEBUG
  8. //#define new DEBUG_NEW //wangwenbin modify 2014-04-27
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. extern Bitmap *g_pImgStaBuf;
  13. /////////////////////////////////////////////////////////////////////////////
  14. // PreviewDlg dialog
  15. PreviewDlg::PreviewDlg(CWnd* pParent) : CDialog(PreviewDlg::IDD, pParent)
  16. {
  17. g_pBlackBrush=new SolidBrush(Color(255,0,0,0));
  18. g_pRedBrush=new SolidBrush(Color(255,255,0,0));
  19. m_bMin=1;
  20. m_pos=0;
  21. m_npages=0;
  22. m_ncurpage=0;
  23. }
  24. void PreviewDlg::DoDataExchange(CDataExchange* pDX)
  25. {
  26. CDialog::DoDataExchange(pDX);
  27. }
  28. BEGIN_MESSAGE_MAP(PreviewDlg, CDialog)
  29. ON_WM_DESTROY()
  30. ON_WM_ERASEBKGND()
  31. ON_WM_LBUTTONDOWN()
  32. END_MESSAGE_MAP()
  33. BOOL PreviewDlg::OnEraseBkgnd(CDC* pDC)
  34. {
  35. CRect rc;
  36. GetClientRect (rc);
  37. pDC->FillSolidRect (rc, RGB(0,0,0));
  38. return 1;
  39. }
  40. BOOL PreviewDlg::OnInitDialog()
  41. {
  42. CDialog::OnInitDialog();
  43. return TRUE;
  44. }
  45. void PreviewDlg::InitCtrl()
  46. {
  47. CString path,path2,str;
  48. int pos;
  49. int i = 0;
  50. for( i=0; i<m_pPathArray->GetSize (); i++)
  51. {
  52. path=m_pPathArray->ElementAt(i);
  53. pos=path.ReverseFind('\\');
  54. str=path.Right(path.GetLength()-pos-1);
  55. str.TrimLeft("m");
  56. m_patharray.Add(path.Left(pos)+"\\s"+str);
  57. }
  58. m_pPathArray=&m_patharray;
  59. if(m_pPathArray->GetSize ()%7==0)
  60. m_npages=m_pPathArray->GetSize ()/7;
  61. else
  62. m_npages=m_pPathArray->GetSize ()/7+1;
  63. CRect rc;
  64. GetWindowRect(rc);
  65. int wid=rc.Width ();
  66. int hei=rc.Height ();
  67. CRect rc2;
  68. rc2.left =25;
  69. rc2.right =wid-5;
  70. rc2.top =30;
  71. int pichei=(hei-6*5-rc2.top*2)/7;
  72. int dt=pichei+5;
  73. rc2.bottom =rc2.top +pichei;
  74. for( i=0; i<7; i++)
  75. {
  76. m_picctrl[i].Create(_T(""), WS_VISIBLE|WS_CHILD|SS_BITMAP, rc2, this);
  77. rc2.top +=dt;
  78. rc2.bottom +=dt;
  79. /* if(m_pPathArray->GetSize()>i)
  80. {
  81. path=m_pPathArray->ElementAt(i);
  82. m_picctrl[i].SetPicPath(path);
  83. }*/
  84. }
  85. rc.left=10;
  86. rc.right=rc.left+10;
  87. rc.top=10;
  88. rc.bottom=25;
  89. m_link1.Create ("¡Ä", WS_CHILD|WS_VISIBLE, rc, this, 100);//¡Å
  90. m_link1.PositionWindow();
  91. m_link1.GetWindowRect (rc);ScreenToClient(rc);
  92. dt=wid/2-rc.left-rc.Width()/2+10;
  93. rc.left +=dt;
  94. rc.right +=dt;
  95. m_link1.MoveWindow(rc);
  96. rc.bottom=hei-5;
  97. rc.top=hei-25;
  98. m_link2.Create ("¡Å", WS_CHILD|WS_VISIBLE, rc, this, 100);
  99. m_link2.PositionWindow();
  100. ////////////////
  101. rc.left=5;
  102. rc.right=rc.left+10;
  103. rc.top=0;
  104. rc.bottom=hei;
  105. m_link3.Create ("£¼", WS_CHILD|WS_VISIBLE, rc, this, 100);//£¾
  106. m_link3.PositionWindow();
  107. m_link3.GetWindowRect (rc);ScreenToClient(rc);
  108. dt=hei/2-rc.top-rc.Height()/2;
  109. rc.top +=dt;
  110. rc.bottom +=dt;
  111. m_link3.MoveWindow(rc);
  112. m_link1.m_bBlackBk=1;
  113. m_link2.m_bBlackBk=1;
  114. m_link3.m_bBlackBk=1;
  115. //////////////////////////////////////////////////////////
  116. // CRect rc;
  117. GetClientRect(rc);
  118. CRgn rgn1, rgn2, rgn3;
  119. rgn1.CreateRectRgn (0,0, rc.Width (), rc.Height ());
  120. // rgn2.CreateRectRgn (0,0, 10, 10);
  121. // rgn3. CreateEllipticRgn(0,0,20,20);
  122. // rgn2.CombineRgn (&rgn2, &rgn3, RGN_DIFF);
  123. m_link1.GetWindowRect (rc);
  124. ScreenToClient(rc);
  125. rgn2.CreateRectRgn (rc.left,rc.top, rc.right, rc.bottom);
  126. rgn1.CombineRgn (&rgn1, &rgn2, RGN_DIFF);
  127. rgn2.DeleteObject ();
  128. m_link2.GetWindowRect (rc);
  129. ScreenToClient(rc);
  130. rgn2.CreateRectRgn (rc.left,rc.top, rc.right, rc.bottom);
  131. rgn1.CombineRgn (&rgn1, &rgn2, RGN_DIFF);
  132. rgn2.DeleteObject ();
  133. m_link3.GetWindowRect (rc);
  134. ScreenToClient(rc);
  135. rgn2.CreateRectRgn (rc.left,rc.top, rc.right, rc.bottom);
  136. rgn1.CombineRgn (&rgn1, &rgn2, RGN_DIFF);
  137. rgn2.DeleteObject ();
  138. for( i=0; i<7; i++)
  139. {
  140. m_picctrl[i].GetWindowRect (rc);
  141. ScreenToClient(rc);
  142. rgn2.CreateRectRgn (rc.left,rc.top, rc.right, rc.bottom);
  143. rgn1.CombineRgn (&rgn1, &rgn2, RGN_DIFF);
  144. rgn2.DeleteObject ();
  145. }
  146. GetClientRect(rc);
  147. rgn2.CreateRectRgn (0,0, rc.Width (), rc.Height ());
  148. rgn2.CombineRgn (&rgn2, &rgn1, RGN_DIFF);
  149. rgn1.DeleteObject ();
  150. ::SetWindowRgn (m_hWnd, rgn2, 0);
  151. }
  152. void PreviewDlg::OnDestroy()
  153. {
  154. CDialog::OnDestroy();
  155. delete g_pBlackBrush;
  156. delete g_pRedBrush;
  157. if(g_pImgStaBuf)delete g_pImgStaBuf;g_pImgStaBuf=NULL;
  158. }
  159. void PreviewDlg::ShowMin()
  160. {
  161. m_bMin=1;
  162. m_link3.SetWindowText ("£¼");
  163. CRect rc;
  164. rc.top =50;
  165. rc.bottom =g_screenhei-50;
  166. rc.right =g_screenwid-10;
  167. rc.left =rc.right -100;
  168. ///////////////////////////
  169. rc.left=g_screenwid-20;
  170. rc.right=rc.left+100;
  171. ///////////////////////////
  172. MoveWindow (rc);
  173. }
  174. void PreviewDlg::ShowNormal()
  175. {
  176. if(((ShowPic22*)GetParent())->m_bauto)
  177. {
  178. return;
  179. }
  180. m_bMin=0;
  181. m_link3.SetWindowText ("£¾");
  182. CRect rc;
  183. rc.top =50;
  184. rc.bottom =g_screenhei-50;
  185. rc.right =g_screenwid-10;
  186. rc.left =rc.right -100;
  187. ///////////////////////////
  188. // rc.left=g_screenwid-20;
  189. // rc.right=rc.left+100;
  190. ///////////////////////////
  191. MoveWindow (rc);
  192. ShowPic(((ShowPic22*)GetParent())->m_nCurImgPos);
  193. }
  194. void PreviewDlg::LinkClick(CString str)
  195. {
  196. if(str=="£¼")
  197. {
  198. ShowNormal();
  199. }
  200. else if(str=="£¾")
  201. {
  202. ShowMin();
  203. }
  204. else if(str=="¡Ä")
  205. {
  206. PrePage();
  207. }
  208. else if(str=="¡Å")
  209. {
  210. NextPage();
  211. }
  212. }
  213. void PreviewDlg::ShowPic(int pos)
  214. {
  215. if(m_bMin)return;
  216. CString path;
  217. m_pos=pos;
  218. m_ncurpage=pos/7;
  219. for(int i=0; i<7; i++)
  220. {
  221. if(m_pos%7==i)
  222. {
  223. m_picctrl[i].m_nFrameMode=100;
  224. }
  225. else
  226. m_picctrl[i].m_nFrameMode=0;
  227. pos=m_ncurpage*7+i;
  228. if(m_pPathArray->GetSize()>pos)
  229. {
  230. path=m_pPathArray->ElementAt(pos);
  231. m_picctrl[i].SetPicPath(path);
  232. }
  233. else
  234. m_picctrl[i].SetPicPath("");
  235. }
  236. }
  237. void PreviewDlg::ShowPic2()
  238. {
  239. CString path;
  240. m_pos=m_ncurpage*7;
  241. for(int i=0; i<7; i++)
  242. {
  243. if(m_pos%7==i)
  244. {
  245. m_picctrl[i].m_nFrameMode=100;
  246. }
  247. else
  248. m_picctrl[i].m_nFrameMode=0;
  249. int pos=m_ncurpage*7+i;
  250. if(m_pPathArray->GetSize()>pos)
  251. {
  252. path=m_pPathArray->ElementAt(pos);
  253. m_picctrl[i].SetPicPath(path);
  254. }
  255. else
  256. m_picctrl[i].SetPicPath("");
  257. }
  258. }
  259. void PreviewDlg::PrePage()
  260. {
  261. try
  262. {
  263. if(m_ncurpage==0)
  264. m_ncurpage=m_npages-1;
  265. else
  266. m_ncurpage--;
  267. ShowPic2();
  268. }
  269. catch(...)
  270. {
  271. }
  272. }
  273. void PreviewDlg::NextPage()
  274. {
  275. try
  276. {
  277. if(m_ncurpage==m_npages-1)
  278. m_ncurpage=0;
  279. else
  280. m_ncurpage++;
  281. ShowPic2();
  282. }
  283. catch(...)
  284. {
  285. }
  286. }
  287. void PreviewDlg::OnLButtonDown(UINT nFlags, CPoint point)
  288. {
  289. CRect rc;
  290. for(int i=0; i<7; i++)
  291. {
  292. m_picctrl[i].GetWindowRect(rc);
  293. ScreenToClient(rc);
  294. if(rc.PtInRect (point))
  295. {
  296. int pos=m_ncurpage*7+i;
  297. if(m_pPathArray->GetSize()>pos)
  298. {
  299. // ShowPic(pos);
  300. int oldpos=m_pos;
  301. m_pos=pos;
  302. for(int i=0; i<7; i++)
  303. {
  304. if(m_pos%7==i)
  305. {
  306. m_picctrl[i].m_nFrameMode=100; m_picctrl[i].Invalidate();
  307. }
  308. else if(oldpos%7==i)
  309. {
  310. m_picctrl[i].m_nFrameMode=0;
  311. m_picctrl[i].Invalidate();
  312. }
  313. }
  314. ((ShowPic22*)GetParent())->m_nCurImgPos = m_pos-1;
  315. ((ShowPic22*)GetParent())->Next();
  316. }
  317. break;
  318. }
  319. }
  320. CDialog::OnLButtonDown(nFlags, point);
  321. }