PreviewDlg.cpp 6.7 KB

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