GDI+画刷(LinearGradientBrush(二))

发布时间 2023-07-21 16:42:24作者: 左边的翼

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 }