PicBar.cpp 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. // PicBar.cpp: implementation of the PicBar class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "YLGL.h"
  6. #include "PicBar.h"
  7. #include "ShowPic22.h"
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11. PicBar::PicBar()
  12. {
  13. m_bShowCut = 1;
  14. }
  15. PicBar::~PicBar()
  16. {
  17. try
  18. {
  19. g_fscalex = g_fscalexbak;
  20. g_fscaley = g_fscaleybak;
  21. if (m_pImageRun)delete m_pImageRun; m_pImageRun = NULL;
  22. if (m_pImageStop)delete m_pImageStop; m_pImageStop = NULL;
  23. AfxGetApp()->WriteProfileInt(LYFZVERSION, "pictime", m_time);
  24. AfxGetApp()->WriteProfileInt(LYFZVERSION, "pictype", m_nType);
  25. }
  26. catch (...)
  27. {
  28. }
  29. }
  30. void PicBar::OnFSCommand(LPCTSTR command, LPCTSTR args)
  31. {
  32. }
  33. void PicBar::Init()
  34. {
  35. try
  36. {
  37. m_bInit = 1;
  38. CRect rc;
  39. GetClientRect(rc);
  40. CRgn rgn1, rgn2, rgn3;
  41. rgn1.CreateRectRgn(0, 0, rc.Width(), rc.Height());
  42. rgn2.CreateRectRgn(0, 0, 10, 10);
  43. rgn3.CreateEllipticRgn(0, 0, 20, 20);
  44. rgn2.CombineRgn(&rgn2, &rgn3, RGN_DIFF);
  45. rgn1.CombineRgn(&rgn1, &rgn2, RGN_DIFF);
  46. rgn2.DeleteObject();
  47. rgn3.DeleteObject();
  48. rgn2.CreateRectRgn(0, 40, 10, 50);
  49. rgn3.CreateEllipticRgn(0, 30, 20, 50);
  50. rgn2.CombineRgn(&rgn2, &rgn3, RGN_DIFF);
  51. rgn1.CombineRgn(&rgn1, &rgn2, RGN_DIFF);
  52. rgn2.DeleteObject();
  53. rgn3.DeleteObject();
  54. rgn2.CreateRectRgn(553 + 70, 40, 563 + 70, 50);
  55. rgn3.CreateEllipticRgn(543 + 70, 30, 563 + 70, 50);
  56. rgn2.CombineRgn(&rgn2, &rgn3, RGN_DIFF);
  57. rgn1.CombineRgn(&rgn1, &rgn2, RGN_DIFF);
  58. rgn2.DeleteObject();
  59. rgn3.DeleteObject();
  60. rgn2.CreateRectRgn(553 + 70, 0, 563 + 70, 10);
  61. rgn3.CreateEllipticRgn(543 + 70, 0, 563 + 70, 20);
  62. rgn2.CombineRgn(&rgn2, &rgn3, RGN_DIFF);
  63. rgn1.CombineRgn(&rgn1, &rgn2, RGN_DIFF);
  64. rgn2.DeleteObject();
  65. rgn3.DeleteObject();
  66. ::SetWindowRgn(m_hWnd, rgn1, 0);
  67. rc = m_rcarray.ElementAt(9);
  68. rc.bottom = rc.top + 13;
  69. rc.right = rc.left + 13;
  70. m_button1.Create("", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | BS_FLAT, rc, this, 100);
  71. rc = m_rcarray.ElementAt(10);
  72. rc.bottom = rc.top + 13;
  73. rc.right = rc.left + 13;
  74. m_button2.Create("", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | BS_FLAT, rc, this, 101);
  75. rc = m_rcarray.ElementAt(11);
  76. rc.bottom = rc.top + 13;
  77. rc.right = rc.left + 13;
  78. m_button3.Create("", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | BS_FLAT, rc, this, 102);
  79. rc = m_rcarray.ElementAt(12);
  80. rc.bottom = rc.top + 13;
  81. rc.right = rc.left + 13;
  82. m_button4.Create("", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | BS_FLAT, rc, this, 103);
  83. if (m_nType == 1)
  84. m_button1.SetCheck(1);
  85. else if (m_nType == 2)
  86. m_button2.SetCheck(1);
  87. else if (m_nType == 3)
  88. m_button3.SetCheck(1);
  89. else if (m_nType == 4)
  90. m_button4.SetCheck(1);
  91. DrawTimes();
  92. MyBmpButton2* m_btn = ((MyBmpButton2*)m_picarray.ElementAt(4));
  93. m_pImageRun = m_btn->m_bmp->Clone();
  94. LoadImageFromRes(&m_pImageStop, MAKEINTRESOURCE(IDR_JPG2), _T("JPG"));
  95. if (m_bShowCut == 0)
  96. ((MyBmpButton2*)m_picarray.ElementAt(15))->ShowWindow(0);
  97. }
  98. catch (...)
  99. {
  100. }
  101. }
  102. void PicBar::Destory()
  103. {
  104. }
  105. //------------------------------------------------------------
  106. // Remark by Jeff
  107. // 11个从*.lia反序列化出来的按钮事件;
  108. // 退出、剪裁、放大、缩小、逆时针旋转、顺时针旋转、上一张、播放幻灯片、下一张、播放速度减、播放速度加;
  109. //------------------------------------------------------------
  110. void PicBar::BtnClick(WPARAM wParam, LPARAM lParam)
  111. {
  112. int id = lParam;
  113. id -= 99;
  114. switch (id)
  115. {
  116. case 1:
  117. ShowWindow(SW_HIDE);
  118. ((ShowPic22*)m_pParent)->KillTimer(6);
  119. ((ShowPic22*)m_pParent)->SetTimer(6, 100, NULL);
  120. break;
  121. case 2:
  122. ((ShowPic22*)m_pParent)->Rotate1(); // 顺时针旋转图片;
  123. break;
  124. case 3:
  125. ((ShowPic22*)m_pParent)->Rotate2(); // 逆时针旋转图片;
  126. break;
  127. case 4:
  128. ((ShowPic22*)m_pParent)->Pre(); // 前一张;
  129. break;
  130. case 5:
  131. ((ShowPic22*)m_pParent)->AutoPic(); // 自动播放;
  132. // if(((ShowPic22*)m_pParent)->m_bauto)
  133. // ShowWindow(SW_HIDE);
  134. break;
  135. case 6:
  136. ((ShowPic22*)m_pParent)->Next(); // 后一张;
  137. break;
  138. case 7: // 播放速度减;
  139. m_time--;
  140. m_time = max(1, m_time);
  141. DrawTimes();
  142. break;
  143. case 8: // 播放速度减加;
  144. m_time++;
  145. m_time = min(20, m_time);
  146. DrawTimes();
  147. break;
  148. case 14: // 放大;
  149. ((ShowPic22*)m_pParent)->OnMouseWheel2(1);
  150. break;
  151. case 15: // 缩小;
  152. ((ShowPic22*)m_pParent)->OnMouseWheel2(0);
  153. break;
  154. case 16:
  155. ((ShowPic22*)m_pParent)->CutPhoto3(); // 剪裁按钮;
  156. break;
  157. }
  158. }
  159. BOOL PicBar::PreTransMsg(MSG* pMsg)
  160. {
  161. if (pMsg->message == WM_KEYDOWN)
  162. {
  163. return m_pParent->PreTranslateMessage(pMsg);
  164. }
  165. else if (pMsg->message == WM_PAINT)
  166. {
  167. // CDialog::PreTranslateMessage(pMsg);
  168. // DrawTimes();
  169. }
  170. else if (pMsg->message == WM_MOUSEMOVE)
  171. {
  172. m_pParent->PreTranslateMessage(pMsg);
  173. return CDialog::PreTranslateMessage(pMsg);
  174. }
  175. else if (pMsg->message == WM_LBUTTONDOWN)
  176. {
  177. g_bNeedDrawParent = 1;
  178. CPoint pt;
  179. ::GetCursorPos(&pt);
  180. ScreenToClient(&pt);
  181. if (m_rcarray.ElementAt(9).PtInRect(pt))
  182. {
  183. m_button1.SetCheck(!m_button1.GetCheck());
  184. if (m_button1.GetCheck())
  185. {
  186. m_button2.SetCheck(0);
  187. m_button3.SetCheck(0);
  188. m_button4.SetCheck(0);
  189. }
  190. EffectChange();
  191. return 1;
  192. }
  193. if (m_rcarray.ElementAt(10).PtInRect(pt))
  194. {
  195. m_button2.SetCheck(!m_button2.GetCheck());
  196. if (m_button2.GetCheck())
  197. {
  198. m_button1.SetCheck(0);
  199. m_button3.SetCheck(0);
  200. m_button4.SetCheck(0);
  201. }
  202. EffectChange();
  203. return 1;
  204. }
  205. if (m_rcarray.ElementAt(11).PtInRect(pt))
  206. {
  207. m_button3.SetCheck(!m_button3.GetCheck());
  208. if (m_button3.GetCheck())
  209. {
  210. m_button2.SetCheck(0);
  211. m_button1.SetCheck(0);
  212. m_button4.SetCheck(0);
  213. }
  214. EffectChange();
  215. return 1;
  216. }
  217. if (m_rcarray.ElementAt(12).PtInRect(pt))
  218. {
  219. m_button4.SetCheck(!m_button4.GetCheck());
  220. if (m_button4.GetCheck())
  221. {
  222. m_button2.SetCheck(0);
  223. m_button3.SetCheck(0);
  224. m_button1.SetCheck(0);
  225. }
  226. EffectChange();
  227. return 1;
  228. }
  229. }
  230. return CDialog::PreTranslateMessage(pMsg);
  231. }
  232. void PicBar::EffectChange()
  233. {
  234. if (m_button1.GetCheck())
  235. {
  236. m_nType = 1;
  237. ((ShowPic22*)m_pParent)->SetEffect(1);
  238. }
  239. else if (m_button2.GetCheck())
  240. {
  241. m_nType = 2;
  242. ((ShowPic22*)m_pParent)->SetEffect(2);
  243. }
  244. else if (m_button3.GetCheck())
  245. {
  246. m_nType = 3;
  247. ((ShowPic22*)m_pParent)->SetEffect(3);
  248. }
  249. else if (m_button4.GetCheck())
  250. {
  251. m_nType = 4;
  252. ((ShowPic22*)m_pParent)->SetEffect(4);
  253. }
  254. else
  255. {
  256. m_nType = 0;
  257. ((ShowPic22*)m_pParent)->SetEffect(0);
  258. }
  259. }
  260. void PicBar::DrawTimes()
  261. {
  262. try
  263. {
  264. Graphics graph(m_pBk);
  265. CRect rc = m_rcarray.ElementAt(8);
  266. rc.top += 2;
  267. rc.left += 5;
  268. RectF layoutRect(rc.left, rc.top, rc.Width(), rc.Height());
  269. CString str;
  270. str.Format("%d", m_time);
  271. int leng = str.GetLength();
  272. StringFormat format;
  273. format.SetAlignment(StringAlignmentCenter);
  274. SolidBrush *Brush = new SolidBrush(Color(255, 50, 55, 69));
  275. graph.FillRectangle(Brush, layoutRect);
  276. delete Brush;
  277. Brush = new SolidBrush(Color(255, 240, 240, 240));
  278. Gdiplus::Font *g_TimerFont = new Gdiplus::Font(L"宋体", 16);
  279. BSTR bstr = str.AllocSysString();
  280. graph.SetTextRenderingHint(TextRenderingHintAntiAlias);
  281. graph.DrawString(
  282. bstr,
  283. leng,
  284. g_TimerFont,
  285. layoutRect,
  286. &format,
  287. Brush);
  288. delete Brush;
  289. delete g_TimerFont;
  290. SysFreeString(bstr);
  291. Invalidate();
  292. }
  293. catch (...)
  294. {
  295. }
  296. }
  297. void PicBar::ChangeBtn()
  298. {
  299. try
  300. {
  301. if (m_pImageRun == NULL)return;
  302. MyBmpButton2* m_btn = ((MyBmpButton2*)m_picarray.ElementAt(4));
  303. if (((ShowPic22*)m_pParent)->m_bauto == 0)
  304. m_btn->ChangePic(m_pImageRun, 0, m_pImageStop, 0);
  305. else
  306. m_btn->ChangePic(m_pImageStop, 0, m_pImageRun, 0);
  307. }
  308. catch (...)
  309. {
  310. }
  311. }
  312. void PicBar::PreLoad()
  313. {
  314. g_pMainWnd->GetSkin();
  315. m_pParent = NULL;
  316. m_time = 3;
  317. m_nType = 1;
  318. m_bInit = 0;
  319. m_pImageRun = NULL;
  320. m_pImageStop = NULL;
  321. m_time = AfxGetApp()->GetProfileInt(LYFZVERSION, "pictime", 3);
  322. m_nType = AfxGetApp()->GetProfileInt(LYFZVERSION, "pictype", 1);
  323. g_fscalexbak = g_fscalex;
  324. g_fscaleybak = g_fscaley;
  325. g_fscalex = 1.0;
  326. g_fscaley = 1.0;
  327. // g_fscalex=(float)g_screenwid/1024.0;
  328. // g_fscaley=(float)g_screenhei/768.0;
  329. }