ViewHistogram.cpp
上传用户:alisonmail
上传日期:2013-02-28
资源大小:500k
文件大小:3k
源码类别:

图片显示

开发平台:

Visual C++

  1. // ViewHistogram.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "ImageView.h"
  5. #include "ViewHistogram.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CViewHistogram dialog
  13. CViewHistogram::CViewHistogram(CWnd* pParent /*=NULL*/)
  14. : CDialog(CViewHistogram::IDD, pParent)
  15. {
  16. //{{AFX_DATA_INIT(CViewHistogram)
  17. // NOTE: the ClassWizard will add member initialization here
  18. //}}AFX_DATA_INIT
  19. m_nCurSel = 0;
  20. m_pnHistogram = NULL;
  21. }
  22. void CViewHistogram::DoDataExchange(CDataExchange* pDX)
  23. {
  24. CDialog::DoDataExchange(pDX);
  25. //{{AFX_DATA_MAP(CViewHistogram)
  26. DDX_Control(pDX, IDC_TAB1, m_Histogram);
  27. //}}AFX_DATA_MAP
  28. }
  29. BEGIN_MESSAGE_MAP(CViewHistogram, CDialog)
  30. //{{AFX_MSG_MAP(CViewHistogram)
  31. ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1)
  32. ON_WM_PAINT()
  33. //}}AFX_MSG_MAP
  34. END_MESSAGE_MAP()
  35. /////////////////////////////////////////////////////////////////////////////
  36. // CViewHistogram message handlers
  37. void CViewHistogram::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) 
  38. {
  39. m_nCurSel = m_Histogram.GetCurSel();
  40. InvalidateRect( NULL, FALSE );
  41. UpdateWindow();
  42. *pResult = 0;
  43. }
  44. void CViewHistogram::OnPaint() 
  45. {
  46. CPaintDC dc(this); // device context for painting
  47. RECT Rect1;
  48. GetWindowRect( &Rect1 );
  49. CWnd *pWnd;
  50. pWnd = GetDlgItem( IDC_HISTOGRAM );
  51. RECT Rect2;
  52. pWnd->GetWindowRect( &Rect2 );
  53. COLORREF Color = GetSysColor( COLOR_BTNFACE );
  54. CBrush Brush( Color );
  55. CPen Pen( PS_SOLID, 1, Color );
  56. CBrush *pOldBrush;
  57. CPen *pOldPen;
  58. CPen BlackPen( PS_SOLID, 1, RGB( 0, 0, 0 ) );
  59. CPen RedPen( PS_SOLID, 1, RGB( 255, 0, 0 ) );
  60. CPen GreenPen( PS_SOLID, 1, RGB( 0, 255, 0 ) );
  61. CPen BluePen( PS_SOLID, 1, RGB( 0, 0, 255 ) );
  62. pOldBrush = (CBrush *) dc.SelectObject( &Brush );
  63. pOldPen = (CPen *) dc.SelectObject( &Pen );
  64. int x1 = Rect2.left - Rect1.left;
  65. int y1 = Rect2.top - Rect1.top - 12;
  66. int x2 = Rect2.right - Rect1.left - 6;
  67. int y2 = Rect2.bottom - Rect1.top - 25;
  68. dc.Rectangle( x1, y1, x2, y2 );
  69. int midx = x1 + ( ( x2 - x1 ) / 2 );
  70. if( m_nCurSel == 0 ) dc.SelectObject( &BlackPen );
  71. else if( m_nCurSel == 3 ) dc.SelectObject( &BluePen );
  72. else if( m_nCurSel == 2 ) dc.SelectObject( &GreenPen );
  73. else dc.SelectObject( &RedPen );
  74. for( int i=0; i<256; i++ ){
  75. if( m_pnHistogram != NULL && m_pnHistogram[m_nCurSel*256+i] != 0 ){
  76. dc.MoveTo( midx - 128 + i, y2 - 1 );
  77. dc.LineTo( midx - 128 + i, y2 - m_pnHistogram[m_nCurSel*256+i] );
  78. }
  79. }
  80. dc.SelectObject( pOldBrush );
  81. dc.SelectObject( pOldPen );
  82. }
  83. BOOL CViewHistogram::OnInitDialog() 
  84. {
  85. CDialog::OnInitDialog();
  86. TC_ITEM Item;
  87. int i;
  88. static char *pszTexts[] = { "Gray", "Red", "Green", "Blue" };
  89. for( i=0; i<4; i++ ){
  90. memset( &Item, 0, sizeof( TC_ITEM ) );
  91. Item.mask = TCIF_TEXT;
  92. Item.pszText = pszTexts[i];
  93. Item.iImage = -1;
  94. m_Histogram.InsertItem( i, &Item );
  95. }
  96. return TRUE;  // return TRUE unless you set the focus to a control
  97.               // EXCEPTION: OCX Property Pages should return FALSE
  98. }
  99. void CViewHistogram::PostNcDestroy() 
  100. {
  101. CDialog::PostNcDestroy();
  102. }