代码之家  ›  专栏  ›  技术社区  ›  Alexander Rafferty

Win32编程问题

  •  1
  • Alexander Rafferty  · 技术社区  · 15 年前

    我想添加一个微妙的渐变到我的标签控件的背景。我该怎么做呢?对我来说最好的方法是什么?

    我认为实现一个占用tab控件空间的自定义控件是可行的,但是我如何使用GDI绘制渐变呢?

    3 回复  |  直到 15 年前
        1
  •  4
  •   Skizz    15 年前

    要使用GDI,需要GradientFill函数。也可以使用GDI+来获取渐变。下面是一个简单的GDI示例:

    TRIVERTEX        vert[2] ;
    GRADIENT_RECT    gRect;
    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      = 100;
    vert [1] .y      = 32; 
    vert [1] .Red    = 0x0000;
    vert [1] .Green  = 0x0000;
    vert [1] .Blue   = 0xff00;
    vert [1] .Alpha  = 0x0000;
    
    gRect.UpperLeft  = 0;
    gRect.LowerRight = 1;
    GradientFill(hdc,vert,2,&gRect,1,GRADIENT_FILL_RECT_H);
    

    若要子类a控件,请先创建该控件,然后替换其WNDPROC函数:

    OldWndProc = (WNDPROC)SetWindowLongPtr (hControl, GWLP_WNDPROC, (LONG_PTR)NewWndProc);
    

    那么,在你的新WNDPROC中:

    NewWndProc (usual args)
    {
      switch message
      {
      case paint:
        draw gradient
        return result
    
      default:
        return CallWindowProc (OldWndProc, ..args..); <- important!
      }
    }
    
        2
  •  1
  •   Alex F    15 年前

    您可以使用GDI+LinearGradientBrush:

    http://msdn.microsoft.com/en-us/library/ms533914(VS.85).aspx

    GDI+在WinXP和更高版本的Windows中可用,也可以安装在以前的Windows版本上。GDI+SDK是Windows SDK的一部分。

        3
  •  1
  •   GSerg    15 年前