123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #include "StdAfx.h"
- #include "GradientItem.h"
- CGradientItem::CGradientItem(void)
- {
- m_clrLeft = RGB(0,0,0);
- m_clrRight = RGB(0,255,0);
- m_nButtonPushed = 0;
- }
- CPropertyGrid::EEditMode CGradientItem::GetEditMode()
- {
- return CPropertyGrid::EM_CUSTOM;
- }
- void CGradientItem::DrawItem(CDC& dc, CRect rc, bool focused)
- {
- CRect rect = rc;
- rect.DeflateRect(focused?rc.Height()+2:2, 2);
- CBrush brush;
- brush.CreateSolidBrush(GetSysColor(COLOR_WINDOWTEXT));
- dc.FrameRect(rect, &brush);
- rect.DeflateRect(1,1);
- TRIVERTEX vert[2] ;
- GRADIENT_RECT gRect;
- vert [0] .x = rect.left;
- vert [0] .y = rect.top;
- vert [0] .Red = GetRValue(m_clrLeft)*256;
- vert [0] .Green = GetGValue(m_clrLeft)*256;
- vert [0] .Blue = GetBValue(m_clrLeft)*256;
- vert [0] .Alpha = 0x0000;
- vert [1] .x = rect.right;
- vert [1] .y = rect.bottom;
- vert [1] .Red = GetRValue(m_clrRight)*256;
- vert [1] .Green = GetGValue(m_clrRight)*256;
- vert [1] .Blue = GetBValue(m_clrRight)*256;
- vert [1] .Alpha = 0x0000;
- gRect.UpperLeft = 0;
- gRect.LowerRight = 1;
- ::GradientFill(dc, vert, 2, &gRect, 1, GRADIENT_FILL_RECT_H);
- if (focused)
- {
- // for propert clean up
- CFont* pOldFont = dc.SelectObject(m_pGrid->GetFontBold());
- // the left button
- CRect rc1 = rc;
- rc1.right = rc1.left + rc1.Height();
- dc.DrawFrameControl(rc1, DFC_BUTTON, DFCS_BUTTONPUSH|(m_nButtonPushed==1?DFCS_PUSHED:0));
- dc.SelectObject(m_pGrid->GetFontBold());
- dc.DrawText("...", rc1, DT_CENTER|DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX);
- // the right button
- CRect rc2 = rc;
- rc2.left = rc2.right - rc2.Height();
- dc.DrawFrameControl(rc2, DFC_BUTTON, DFCS_BUTTONPUSH|(m_nButtonPushed==2?DFCS_PUSHED:0));
- dc.SelectObject(m_pGrid->GetFontBold());
- dc.DrawText("...", rc2, DT_CENTER|DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX);
- // clean up
- dc.SelectObject(pOldFont);
- }
- }
- bool CGradientItem::OnLButtonDown(CRect rc, CPoint pt)
- {
- m_nButtonPushed = 0;
- if (rc.PtInRect(pt))
- {
- if (pt.x<=rc.left+rc.Height())
- {
- m_nButtonPushed = 1;
- return true;
- }
- if (pt.x>=rc.right-rc.Height())
- {
- m_nButtonPushed = 2;
- return true;
- }
- }
- return false;
- }
- void CGradientItem::OnMouseMove(CRect rc, CPoint pt)
- {
- OnLButtonDown(rc, pt);
- }
- void CGradientItem::OnLButtonUp(CRect rc, CPoint pt)
- {
- COLORREF& clr = (m_nButtonPushed==1) ? m_clrLeft : m_clrRight;
- m_nButtonPushed = 0;
- CColorDialog dlg(clr, 0, m_pGrid);
- if (dlg.DoModal() == IDOK)
- {
- clr = dlg.GetColor();
- m_pGrid->Invalidate();
- }
- }
|