• 用渐变色填充背景(三)


    下面看两个示例,演示了如何使用GradientFill()
    其实很简单,参数一为每个顶点的位置、色彩定义,参数二为要使用的顶点数目,第三个参数为这些顶点如何绘制,第四个参数为绘制的次数,第五个参数为绘制模式
    如:vert,4,&gTRi,3,GRADIENT_FILL_TRIANGLE
    (1)绘制模式为:三角形GRADIENT_FILL_TRIANGLE
    (2)绘制的顶点数为4,就是说有4个顶点,这4个顶点的位置、色彩定义见第一个示例
    (3)然后就是绘制的次数为3次,分别为gTRi[0]、gTRi[1]、gTRi[2],
    而每一次给出三个顶点,绘制成三角形。三个顶点的顺序似乎不重要。

    第一个:
      CDCHandle dc(hDC);
      TRIVERTEX        vert [4] ;
      GRADIENT_TRIANGLE    gTRi[4];
      vert [0] .x       =  0;
      vert [0] .y       =  0;
      vert [0] .Red     =  0x0000;
      vert [0] .Green   =  0x0000;
      vert [0] .Blue    =  0x0000;
      vert [0] .Alpha   =  0x0000;

      vert [1] .x       =  350;
      vert [1] .y       =  0;
      vert [1] .Red     =  0x0000;
      vert [1] .Green   =  0x0000;
      vert [1] .Blue    =  0xff00;
      vert [1] .Alpha   =  0x0000;

      vert [2] .x       =  350;
      vert [2] .y       =  350;
      vert [2] .Red     =  0x0000;
      vert [2] .Green   =  0x0000;
      vert [2] .Blue    =  0xff00;
      vert [2] .Alpha   =  0x0000;

      vert [3] .x       =  0;
      vert [3] .y       =  350;
      vert [3] .Red     =  0xff00;
      vert [3] .Green   =  0xff00;
      vert [3] .Blue    =  0xff00;
      vert [3] .Alpha   =  0x0000;

      gTRi[0].Vertex1   = 1;
      gTRi[0].Vertex2   = 3;
      gTRi[0].Vertex3   = 0;

      gTRi[1].Vertex1   = 0;
      gTRi[1].Vertex2   = 2;
      gTRi[1].Vertex3   = 3;

      gTRi[2].Vertex1   = 1;
      gTRi[2].Vertex2   = 3;
      gTRi[2].Vertex3   = 2;

      gTRi[3].Vertex1   = 0;
      gTRi[3].Vertex2   = 2;
      gTRi[3].Vertex3   = 1;
      dc.GradientFill(vert,4,&gTRi,4,GRADIENT_FILL_TRIANGLE);

    第二个:

        if ( IsVertical() )
            {
            TRIVERTEX tv[] = { { rect.left, rect.top, 0xff00 },
                               { rect.left + m_cxyHeader, rect.bottom, 0, 0xff00 } };
            GRADIENT_RECT gr = { 0, 1 };

            dc.GradientFill ( tv, 2, &gr, 1, GRADIENT_FILL_RECT_V );
            }
        else
            {
            TRIVERTEX tv[] = { { rect.left, rect.top, 0xff00 },
                               { rect.right, rect.top + m_cxyHeader, 0, 0xff00 } };
            GRADIENT_RECT gr = { 0, 1 };

            dc.GradientFill ( tv, 2, &gr, 1, GRADIENT_FILL_RECT_H );

            rect.bottom = rect.top + m_cxyHeader;

            // draw title only for horizontal pane container
            dc.SaveDC();

            dc.SetTextColor ( RGB(255,255,255) );
            dc.SetBkMode ( TRANSPARENT );
            dc.SelectFont ( GetTitleFont() );

            rect.left += m_cxyTextOffset;
            rect.right -= m_cxyTextOffset;

            if ( m_tb.m_hWnd != NULL )
                rect.right -= m_cxToolBar;

            dc.DrawText ( m_szTitle, -1, &rect,
                          DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS );

            dc.RestoreDC(-1);
            }

  • 相关阅读:
    GridView跨列
    html的积累
    什么是json?
    关于string
    Effective C# Item38:定制和支持数据绑定
    Effective C# Item44:为应用程序创建特定的异常类
    Effective C# Item42:利用特性简化反射
    Effective C# Item47:选择安全代码
    Effective C# Item43 : 避免过度使用反射
    Effective C# Item39 : 使用.NET验证
  • 原文地址:https://www.cnblogs.com/huqingyu/p/45639.html
Copyright © 2020-2023  润新知