FiltersDialog.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:4k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // FiltersDialog.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "skincontrols.h"
  5. #include "FiltersDialog.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. class CColorFilterMonochrome : public CXTPSkinManagerColorFilter
  12. {
  13. public:
  14. virtual void ApplyColorFilter(COLORREF& clr)
  15. {
  16. double dGray = (GetRValue(clr) * 0.299 + GetGValue(clr) * 0.587 + GetBValue(clr) * 0.114);
  17. clr = RGB(dGray, dGray, dGray);
  18. }
  19. };
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CFiltersDialog dialog
  22. CFiltersDialog::CFiltersDialog(CWnd* pParent /*=NULL*/)
  23. : CDialog(CFiltersDialog::IDD, pParent)
  24. {
  25. //{{AFX_DATA_INIT(CFiltersDialog)
  26. m_nHue = 10;
  27. m_nSaturation = 50;
  28. m_nBlend = 255;
  29. m_bColorize = XTPSkinManager()->IsColorFilterExists();
  30. m_bColorShift = FALSE;
  31. m_bCustom = FALSE;
  32. m_nBlue = -50;
  33. m_nGreen = 0;
  34. m_nRed = +50;
  35. //}}AFX_DATA_INIT
  36. }
  37. void CFiltersDialog::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. //{{AFX_DATA_MAP(CFiltersDialog)
  41. DDX_Control(pDX, IDC_SLIDER_BLUE, m_wndBlue);
  42. DDX_Control(pDX, IDC_SLIDER_GREEN, m_wndGreen);
  43. DDX_Control(pDX, IDC_SLIDER_RED, m_wndRed);
  44. DDX_Control(pDX, IDC_SLIDER_SATURATION, m_wndSaturation);
  45. DDX_Control(pDX, IDC_SLIDER_HUE, m_wndHue);
  46. DDX_Control(pDX, IDC_SLIDER_BLEND, m_wndBlend);
  47. DDX_Slider(pDX, IDC_SLIDER_HUE, m_nHue);
  48. DDX_Slider(pDX, IDC_SLIDER_SATURATION, m_nSaturation);
  49. DDX_Slider(pDX, IDC_SLIDER_BLEND, m_nBlend);
  50. DDX_Check(pDX, IDC_CHECK_COLORIZE, m_bColorize);
  51. DDX_Check(pDX, IDC_CHECK_COLORSHIFT, m_bColorShift);
  52. DDX_Check(pDX, IDC_CHECK_CUSTOM, m_bCustom);
  53. DDX_Slider(pDX, IDC_SLIDER_BLUE, m_nBlue);
  54. DDX_Slider(pDX, IDC_SLIDER_GREEN, m_nGreen);
  55. DDX_Slider(pDX, IDC_SLIDER_RED, m_nRed);
  56. //}}AFX_DATA_MAP
  57. }
  58. BEGIN_MESSAGE_MAP(CFiltersDialog, CDialog)
  59. //{{AFX_MSG_MAP(CFiltersDialog)
  60. ON_BN_CLICKED(IDC_CHECK_COLORIZE, UpdateFilters)
  61. ON_BN_CLICKED(IDC_CHECK_COLORSHIFT, UpdateFilters)
  62. ON_BN_CLICKED(IDC_CHECK_CUSTOM, UpdateFilters)
  63. ON_WM_HSCROLL()
  64. //}}AFX_MSG_MAP
  65. END_MESSAGE_MAP()
  66. /////////////////////////////////////////////////////////////////////////////
  67. // CFiltersDialog message handlers
  68. BOOL CFiltersDialog::OnInitDialog() 
  69. {
  70. CDialog::OnInitDialog();
  71. m_wndBlend.SetRange(0, 100);
  72. m_wndHue.SetRange(0, 255);
  73. m_wndSaturation.SetRange(0, 255);
  74. m_wndRed.SetRange(-100, 100);
  75. m_wndGreen.SetRange(-100, 100);
  76. m_wndBlue.SetRange(-100, 100);
  77. UpdateData(FALSE);
  78. return TRUE;  // return TRUE unless you set the focus to a control
  79.               // EXCEPTION: OCX Property Pages should return FALSE
  80. }
  81. void CFiltersDialog::UpdateFilters()
  82. {
  83. UpdateData();
  84. XTPSkinManager()->RemoveColorFilters();
  85. if (m_bColorize)
  86. {
  87. XTPSkinManager()->AddColorFilter(new CXTPSkinManagerColorFilterColorize((BYTE)m_nHue, (BYTE)m_nSaturation, (float)m_nBlend / 100.0f));
  88. }
  89. if (m_bColorShift)
  90. {
  91. XTPSkinManager()->AddColorFilter(new CXTPSkinManagerColorFilterShiftRGB(m_nRed, m_nGreen, m_nBlue));
  92. }
  93. if (m_bCustom)
  94. {
  95. XTPSkinManager()->AddColorFilter(new CColorFilterMonochrome());
  96. }
  97. XTPSkinManager()->RedrawAllControls();
  98. }
  99. void CFiltersDialog::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  100. {
  101. if ((CWnd*)pScrollBar == &m_wndSaturation || 
  102. (CWnd*)pScrollBar == &m_wndHue  || 
  103. (CWnd*)pScrollBar == &m_wndBlend)
  104. {
  105. UpdateData();
  106. m_bColorize = TRUE;
  107. UpdateData(FALSE);
  108. UpdateFilters();
  109. }
  110. if ((CWnd*)pScrollBar == &m_wndRed || 
  111. (CWnd*)pScrollBar == &m_wndBlue  || 
  112. (CWnd*)pScrollBar == &m_wndGreen)
  113. {
  114. UpdateData();
  115. m_bColorShift = TRUE;
  116. UpdateData(FALSE);
  117. UpdateFilters();
  118. }
  119. CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  120. }