// PicBar.cpp: implementation of the PicBar class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "YLGL.h" #include "PicBar.h" #include "ShowPic22.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// PicBar::PicBar() { m_bShowCut = 1; } PicBar::~PicBar() { try { g_fscalex = g_fscalexbak; g_fscaley = g_fscaleybak; if (m_pImageRun)delete m_pImageRun; m_pImageRun = NULL; if (m_pImageStop)delete m_pImageStop; m_pImageStop = NULL; AfxGetApp()->WriteProfileInt(LYFZVERSION, "pictime", m_time); AfxGetApp()->WriteProfileInt(LYFZVERSION, "pictype", m_nType); } catch (...) { } } void PicBar::OnFSCommand(LPCTSTR command, LPCTSTR args) { } void PicBar::Init() { try { m_bInit = 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); rgn1.CombineRgn(&rgn1, &rgn2, RGN_DIFF); rgn2.DeleteObject(); rgn3.DeleteObject(); rgn2.CreateRectRgn(0, 40, 10, 50); rgn3.CreateEllipticRgn(0, 30, 20, 50); rgn2.CombineRgn(&rgn2, &rgn3, RGN_DIFF); rgn1.CombineRgn(&rgn1, &rgn2, RGN_DIFF); rgn2.DeleteObject(); rgn3.DeleteObject(); rgn2.CreateRectRgn(553 + 70, 40, 563 + 70, 50); rgn3.CreateEllipticRgn(543 + 70, 30, 563 + 70, 50); rgn2.CombineRgn(&rgn2, &rgn3, RGN_DIFF); rgn1.CombineRgn(&rgn1, &rgn2, RGN_DIFF); rgn2.DeleteObject(); rgn3.DeleteObject(); rgn2.CreateRectRgn(553 + 70, 0, 563 + 70, 10); rgn3.CreateEllipticRgn(543 + 70, 0, 563 + 70, 20); rgn2.CombineRgn(&rgn2, &rgn3, RGN_DIFF); rgn1.CombineRgn(&rgn1, &rgn2, RGN_DIFF); rgn2.DeleteObject(); rgn3.DeleteObject(); ::SetWindowRgn(m_hWnd, rgn1, 0); rc = m_rcarray.ElementAt(9); rc.bottom = rc.top + 13; rc.right = rc.left + 13; m_button1.Create("", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | BS_FLAT, rc, this, 100); rc = m_rcarray.ElementAt(10); rc.bottom = rc.top + 13; rc.right = rc.left + 13; m_button2.Create("", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | BS_FLAT, rc, this, 101); rc = m_rcarray.ElementAt(11); rc.bottom = rc.top + 13; rc.right = rc.left + 13; m_button3.Create("", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | BS_FLAT, rc, this, 102); rc = m_rcarray.ElementAt(12); rc.bottom = rc.top + 13; rc.right = rc.left + 13; m_button4.Create("", WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX | BS_FLAT, rc, this, 103); if (m_nType == 1) m_button1.SetCheck(1); else if (m_nType == 2) m_button2.SetCheck(1); else if (m_nType == 3) m_button3.SetCheck(1); else if (m_nType == 4) m_button4.SetCheck(1); DrawTimes(); MyBmpButton2* m_btn = ((MyBmpButton2*)m_picarray.ElementAt(4)); m_pImageRun = m_btn->m_bmp->Clone(); LoadImageFromRes(&m_pImageStop, MAKEINTRESOURCE(IDR_JPG2), _T("JPG")); if (m_bShowCut == 0) ((MyBmpButton2*)m_picarray.ElementAt(15))->ShowWindow(0); } catch (...) { } } void PicBar::Destory() { } //------------------------------------------------------------ // Remark by Jeff // 11个从*.lia反序列化出来的按钮事件; // 退出、剪裁、放大、缩小、逆时针旋转、顺时针旋转、上一张、播放幻灯片、下一张、播放速度减、播放速度加; //------------------------------------------------------------ void PicBar::BtnClick(WPARAM wParam, LPARAM lParam) { int id = lParam; id -= 99; switch (id) { case 1: ShowWindow(SW_HIDE); ((ShowPic22*)m_pParent)->KillTimer(6); ((ShowPic22*)m_pParent)->SetTimer(6, 100, NULL); break; case 2: ((ShowPic22*)m_pParent)->Rotate1(); // 顺时针旋转图片; break; case 3: ((ShowPic22*)m_pParent)->Rotate2(); // 逆时针旋转图片; break; case 4: ((ShowPic22*)m_pParent)->Pre(); // 前一张; break; case 5: ((ShowPic22*)m_pParent)->AutoPic(); // 自动播放; // if(((ShowPic22*)m_pParent)->m_bauto) // ShowWindow(SW_HIDE); break; case 6: ((ShowPic22*)m_pParent)->Next(); // 后一张; break; case 7: // 播放速度减; m_time--; m_time = max(1, m_time); DrawTimes(); break; case 8: // 播放速度减加; m_time++; m_time = min(20, m_time); DrawTimes(); break; case 14: // 放大; ((ShowPic22*)m_pParent)->OnMouseWheel2(1); break; case 15: // 缩小; ((ShowPic22*)m_pParent)->OnMouseWheel2(0); break; case 16: ((ShowPic22*)m_pParent)->CutPhoto3(); // 剪裁按钮; break; } } BOOL PicBar::PreTransMsg(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { return m_pParent->PreTranslateMessage(pMsg); } else if (pMsg->message == WM_PAINT) { // CDialog::PreTranslateMessage(pMsg); // DrawTimes(); } else if (pMsg->message == WM_MOUSEMOVE) { m_pParent->PreTranslateMessage(pMsg); return CDialog::PreTranslateMessage(pMsg); } else if (pMsg->message == WM_LBUTTONDOWN) { g_bNeedDrawParent = 1; CPoint pt; ::GetCursorPos(&pt); ScreenToClient(&pt); if (m_rcarray.ElementAt(9).PtInRect(pt)) { m_button1.SetCheck(!m_button1.GetCheck()); if (m_button1.GetCheck()) { m_button2.SetCheck(0); m_button3.SetCheck(0); m_button4.SetCheck(0); } EffectChange(); return 1; } if (m_rcarray.ElementAt(10).PtInRect(pt)) { m_button2.SetCheck(!m_button2.GetCheck()); if (m_button2.GetCheck()) { m_button1.SetCheck(0); m_button3.SetCheck(0); m_button4.SetCheck(0); } EffectChange(); return 1; } if (m_rcarray.ElementAt(11).PtInRect(pt)) { m_button3.SetCheck(!m_button3.GetCheck()); if (m_button3.GetCheck()) { m_button2.SetCheck(0); m_button1.SetCheck(0); m_button4.SetCheck(0); } EffectChange(); return 1; } if (m_rcarray.ElementAt(12).PtInRect(pt)) { m_button4.SetCheck(!m_button4.GetCheck()); if (m_button4.GetCheck()) { m_button2.SetCheck(0); m_button3.SetCheck(0); m_button1.SetCheck(0); } EffectChange(); return 1; } } return CDialog::PreTranslateMessage(pMsg); } void PicBar::EffectChange() { if (m_button1.GetCheck()) { m_nType = 1; ((ShowPic22*)m_pParent)->SetEffect(1); } else if (m_button2.GetCheck()) { m_nType = 2; ((ShowPic22*)m_pParent)->SetEffect(2); } else if (m_button3.GetCheck()) { m_nType = 3; ((ShowPic22*)m_pParent)->SetEffect(3); } else if (m_button4.GetCheck()) { m_nType = 4; ((ShowPic22*)m_pParent)->SetEffect(4); } else { m_nType = 0; ((ShowPic22*)m_pParent)->SetEffect(0); } } void PicBar::DrawTimes() { try { Graphics graph(m_pBk); CRect rc = m_rcarray.ElementAt(8); rc.top += 2; rc.left += 5; RectF layoutRect(rc.left, rc.top, rc.Width(), rc.Height()); CString str; str.Format("%d", m_time); int leng = str.GetLength(); StringFormat format; format.SetAlignment(StringAlignmentCenter); SolidBrush *Brush = new SolidBrush(Color(255, 50, 55, 69)); graph.FillRectangle(Brush, layoutRect); delete Brush; Brush = new SolidBrush(Color(255, 240, 240, 240)); Gdiplus::Font *g_TimerFont = new Gdiplus::Font(L"宋体", 16); BSTR bstr = str.AllocSysString(); graph.SetTextRenderingHint(TextRenderingHintAntiAlias); graph.DrawString( bstr, leng, g_TimerFont, layoutRect, &format, Brush); delete Brush; delete g_TimerFont; SysFreeString(bstr); Invalidate(); } catch (...) { } } void PicBar::ChangeBtn() { try { if (m_pImageRun == NULL)return; MyBmpButton2* m_btn = ((MyBmpButton2*)m_picarray.ElementAt(4)); if (((ShowPic22*)m_pParent)->m_bauto == 0) m_btn->ChangePic(m_pImageRun, 0, m_pImageStop, 0); else m_btn->ChangePic(m_pImageStop, 0, m_pImageRun, 0); } catch (...) { } } void PicBar::PreLoad() { g_pMainWnd->GetSkin(); m_pParent = NULL; m_time = 3; m_nType = 1; m_bInit = 0; m_pImageRun = NULL; m_pImageStop = NULL; m_time = AfxGetApp()->GetProfileInt(LYFZVERSION, "pictime", 3); m_nType = AfxGetApp()->GetProfileInt(LYFZVERSION, "pictype", 1); g_fscalexbak = g_fscalex; g_fscaleybak = g_fscaley; g_fscalex = 1.0; g_fscaley = 1.0; // g_fscalex=(float)g_screenwid/1024.0; // g_fscaley=(float)g_screenhei/768.0; }