Win32 вопрос программирования - PullRequest
1 голос
/ 07 октября 2010

У меня есть приложение на основе вкладок для окон, которое я разрабатываю самостоятельно.

Я хотел бы добавить тонкий градиент на фоне моего элемента управления вкладками.Как бы я обойти это делать?Какой метод мне лучше всего использовать?

Я думаю, что реализация пользовательского элемента управления, занимающего место на вкладке, будет работать, но как мне тогда нарисовать градиент с использованием GDI?1006 * Спасибо заранее.

Ответы [ 3 ]

4 голосов
/ 07 октября 2010

Для использования 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);

Что касается элемента управления вкладкой, вы можете создать подкласс элемента управления и переопределить его не-клиентские и клиентские обработчики рисования для визуализации градиента.

ДляДля подкласса управления сначала создайте элемент управления, а затем замените его функцию 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!
  }
}
1 голос
/ 07 октября 2010

В старом добром GDI функция GradientFill выполняет градиент.

1 голос
/ 07 октября 2010

Вы можете использовать GDI + LinearGradientBrush:

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

GDI + доступен в WinXP и более поздних версиях Windows, может быть установлен и в предыдущих версиях Windows. GDI + SDK является частью Windows SDK.

...