// 在图像上做标记 void CFFTDisp::DrawMark( int x, int y, char type, COLORREF color) { if ( m_dcPlot == NULL ) { return; } int len = 3; CPen penMark( PS_SOLID, 1, color ); CPen* pOldPen = m_dcPlot.SelectObject( &penMark ); switch ( type ) { case '+': { m_dcPlot.MoveTo( x-len, y ); m_dcPlot.LineTo( x+len, y ); m_dcPlot.MoveTo( x, y-len ); m_dcPlot.LineTo( x, y+len ); break; } case 'x': { m_dcPlot.MoveTo( x-len, y-len ); m_dcPlot.LineTo( x+len, y+len ); m_dcPlot.MoveTo( x-len, y+len ); m_dcPlot.LineTo( x+len, y-len ); break; } case 's': { m_dcPlot.MoveTo( x-len, y-len ); m_dcPlot.LineTo( x+len, y-len ); m_dcPlot.MoveTo( x-len, y+len ); m_dcPlot.LineTo( x+len, y+len ); break; } default: break; } if ( pOldPen != NULL ) { m_dcPlot.SelectObject( pOldPen ); } }
void CMyDialog::DrawCloseButton(CDC *pDC,int enumStatus) { Color clrStart,clrEnd,clrBorder,clrCloseMark; CRect rc; GetClientRect(rc); if (enumStatus==DTS_NORMAL) { clrStart=Color(231,231,231); clrEnd=Color(227,227,227); clrBorder=Color(158,158,158); clrCloseMark=Color(128,128,128); clrStart=Color(219,219,220); clrEnd=Color(190,192,193); } else if (enumStatus==DTS_HOVER) { clrStart=Color(245,28,6); clrEnd=Color(207,9,7); clrBorder=Color(187,5,0); clrCloseMark=Color(255,255,255); } else// if (enumStatus==DTS_CLICKED) { clrStart=Color(207,9,7); clrEnd=Color(245,28,6); clrBorder=Color(187,5,0); clrCloseMark=Color(255,255,255); } m_rcClose.SetRect(rc.right-36,1,rc.right-6,21); GraphicsPath path; int nRadius=4; Point point[5]; point[0]=Point(m_rcClose.right,m_rcClose.bottom-nRadius); point[1]=Point(m_rcClose.right,m_rcClose.top); point[2]=Point(m_rcClose.left,m_rcClose.top); point[3]=Point(m_rcClose.left,m_rcClose.bottom); point[4]=Point(m_rcClose.right-nRadius,m_rcClose.bottom); path.AddLines(point,5); path.AddArc(m_rcClose.right-2*nRadius,m_rcClose.bottom-2*nRadius,2*nRadius,2*nRadius,0,90); LinearGradientBrush linGrBrush( Rect(m_rcClose.left,m_rcClose.top,m_rcClose.Width(),m_rcClose.Height()), clrStart, clrEnd, LinearGradientModeVertical); Graphics gs(pDC->m_hDC); gs.FillPath(&linGrBrush,&path); CPoint ptCenter=m_rcClose.CenterPoint(); if (enumStatus==DTS_CLICKED) { ptCenter.Offset(1,1); } CPen penMark(PS_SOLID,2,clrCloseMark.ToCOLORREF()); CPen *pOldPen=pDC->SelectObject(&penMark); pDC->MoveTo(ptCenter.x-5,ptCenter.y-5); pDC->LineTo(ptCenter.x+5,ptCenter.y+5); pDC->MoveTo(ptCenter.x-5,ptCenter.y+5); pDC->LineTo(ptCenter.x+5,ptCenter.y-5); // CPen penBorder(PS_SOLID,1,clrBorder.ToCOLORREF()); // pDC->SelectObject(&penBorder); // pDC->MoveTo(m_rcClose.left-1,m_rcClose.top); // pDC->LineTo(m_rcClose.left-1,m_rcClose.bottom); pDC->SelectObject(pOldPen); }