ColorComboBox.cpp
上传用户:zm80169
上传日期:2007-01-15
资源大小:6k
文件大小:2k
源码类别:

图形图像处理

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "ColorComboBox.h"
  3. CColorComboBox::CColorComboBox()
  4. {
  5. }
  6. CColorComboBox::~CColorComboBox()
  7. {
  8. }
  9. BEGIN_MESSAGE_MAP(CColorComboBox, CComboBox)
  10. //{{AFX_MSG_MAP(CColorComboBox)
  11. ON_WM_MOUSEMOVE()
  12. ON_WM_TIMER()
  13. ON_WM_CTLCOLOR()
  14. //}}AFX_MSG_MAP
  15. END_MESSAGE_MAP()
  16. HBRUSH CColorComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  17. {
  18. HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
  19. if( nCtlColor == CTLCOLOR_LISTBOX || nCtlColor == CTLCOLOR_EDIT || nCtlColor == CTLCOLOR_MSGBOX )
  20.         {
  21.                 if (m_bOverControl)
  22.                 {
  23.                         pDC->SetTextColor(m_crHotFg);
  24.                         pDC->SetBkColor(m_crHotBg);
  25.                         hbr = *m_pHotBrush;
  26.                 }
  27.                 else
  28.                 {
  29.                         pDC->SetTextColor(m_crFg);
  30.                         pDC->SetBkColor(m_crBg);
  31.                         hbr = *m_pBrush;
  32.                 }
  33.         }
  34. return hbr;
  35. }
  36. BOOL CColorComboBox::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult)
  37. {
  38.         if (message != WM_CTLCOLOREDIT)
  39.         {
  40.                  return CComboBox::OnChildNotify(message,wParam,lParam,pLResult);
  41.         }
  42.         HDC hdcChild = (HDC)wParam;
  43.         if( m_bOverControl )
  44.         {
  45.                 SetTextColor(hdcChild, m_crHotFg);
  46.                 SetBkColor(hdcChild, m_crHotBg);
  47.                 *pLResult = (LRESULT)(m_pHotBrush->GetSafeHandle());
  48.         }
  49.         else
  50.         {
  51.                 SetTextColor(hdcChild, m_crFg);
  52.                 SetBkColor(hdcChild, m_crBg);
  53.                 *pLResult = (LRESULT)(m_pBrush->GetSafeHandle());
  54.         }
  55.         return TRUE;
  56. }
  57. void CColorComboBox::OnMouseMove(UINT nFlags, CPoint point)
  58. {
  59.         if (!m_bOverControl)
  60.         {
  61.                 m_bOverControl = TRUE;
  62.                 Invalidate();
  63.                 SetTimer(m_nTimerID, m_iRolloverDelay, NULL);
  64.         }
  65. CComboBox::OnMouseMove(nFlags, point);
  66. }
  67. void CColorComboBox::OnTimer(UINT nIDEvent)
  68. {
  69.         CPoint p(GetMessagePos());
  70.         ScreenToClient(&p);
  71.         CRect rect;
  72.         GetClientRect(rect);
  73.         if (!rect.PtInRect(p))
  74.         {
  75.                 m_bOverControl = FALSE;
  76.                 KillTimer(m_nTimerID);
  77.                 Invalidate();
  78.         }
  79. CComboBox::OnTimer(nIDEvent);
  80. }