Выгладить закругленные углы окон - PullRequest
2 голосов
/ 13 декабря 2010

HI

Я создал окно с закругленными краями, используя вызовы API окон CreateRoundRgn и SetWindowRgn, однако скругленные углы не такие гладкие, как, например, скругленный прямоугольник, нарисованный с помощью GDI +.Есть ли способ сгладить углы окна?

procedure TPBSDashboardPanel.DefineWindowRegion;
var
  WindowRegion: HRGN;
begin
  if Assigned(Parent) then
  begin
    WindowRegion := CreateRoundRectRgn(0, 0, Width, Height, 20, 20);

    SetWindowRgn(Handle, WindowRegion, True);
  end;
end;

Ответы [ 3 ]

5 голосов
/ 13 декабря 2010

Если вы хотите нарисовать тематический прямоугольник, отметьте эту ссылку. Чтобы отобразить (полу) прозрачное растровое изображение, какой (я думаю) будет ваша цель, проверьте эту функцию. Для использования обеих функций, дайте мне знать или вдохновить себя с помощью Google.

3 голосов
/ 13 декабря 2010

Возможно, использовать растровое изображение с альфа-прозрачностью для имитации сглаживания в дополнение к немного большей округлой области, позволяющей Windows выполнять тестирование на попадание.

Проблема здесь в том, что Win32 GDI использует регионы дляпроверка попадания, поэтому при прорисовке каждая точка в регионе имеет целочисленные координаты логических единиц, поэтому при проверке попадания может быть известно, что она находится за пределами или внутри области.

Благословит Бог

PS: AFAIK, нет никакого способа определить фактическую область, используемую окном, которое сделало бы границы окон визуализируемыми с помощью сглаживания, и Win32 поддерживает только псевдонимы для окон.WDM в Windows 7 стирает границы, но я думаю, что это тень, а не фактическая область, которая нарисована размытой.

0 голосов
/ 13 декабря 2010

Я не эксперт в этом, но я знаю, что GDI + поддерживает сглаживание, а GDI - нет. Без сглаживания закругленные углы не будут выглядеть гладкими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...