2、LinearGradientBrush(Rect&,Color&,Color&,REAL,BOOL),代码演示结果如下所示:
注:Rect规定画刷一次所绘制的范围,REAL值是指定颜色渐变的方向
变量定义:
1 CDC MemDCIndicator; 2 CBitmap MemBitmapIndicator; 3 CDC *pDC; 4 5 REAL m_pRealValue; 6 CSliderCtrl m_pSlider;
关键代码:
1 void LinearGradientExOneDlg::DoDataExchange(CDataExchange* pDX) 2 { 3 CDialogEx::DoDataExchange(pDX); 4 DDX_Control(pDX, IDC_SLIDER2, m_pSlider); 5 } 6 7 8 BEGIN_MESSAGE_MAP(LinearGradientExOneDlg, CDialogEx) 9 ON_WM_PAINT() 10 ON_WM_HSCROLL() 11 END_MESSAGE_MAP() 12 13 void LinearGradientExOneDlg::DrawFunction() 14 { 15 CRect rt; 16 GetClientRect(&rt); 17 pDC = GetDC(); 18 MemDCIndicator.CreateCompatibleDC(pDC); 19 MemBitmapIndicator.CreateCompatibleBitmap(pDC, 400, 400); 20 MemDCIndicator.SelectObject(&MemBitmapIndicator); 21 MemDCIndicator.FillSolidRect(rt, RGB(100, 100, 100)); 22 23 Graphics graphics(MemDCIndicator); 24 graphics.SetSmoothingMode(SmoothingModeHighQuality); 25 LinearGradientBrush lbr(Rect(0,0, 400, 400),Color(255,0,0),Color(0,255,0),m_pRealValue,TRUE); 26 27 graphics.FillRectangle(&lbr, rt.left, rt.top, 400, 400); 28 29 pDC->BitBlt(rt.left, rt.top, 400, 400, &MemDCIndicator, 0, 0, SRCCOPY); 30 MemDCIndicator.DeleteDC(); 31 MemBitmapIndicator.DeleteObject(); 32 ReleaseDC(pDC); 33 } 34 35 void LinearGradientExOneDlg::OnPaint() 36 { 37 CPaintDC dc(this); 38 DrawFunction(); 39 } 40 41 void LinearGradientExOneDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar * pScrollBar) 42 { 43 int ctrID = pScrollBar->GetDlgCtrlID(); 44 switch (ctrID) 45 { 46 case IDC_SLIDER2: 47 m_pRealValue = m_pSlider.GetPos()*3; 48 TRACE(L"%d\r\n", m_pSlider.GetPos()); 49 DrawFunction(); 50 break; 51 } 52 } 53 54 BOOL LinearGradientExOneDlg::OnInitDialog() 55 { 56 CDialogEx::OnInitDialog(); 57 SetWindowPos(NULL, 100, 100, 400, 600, SWP_NOZORDER); 58 m_pRealValue = 0; 59 return TRUE; 60 }