Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2014, 11:52   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию Шестиугольное окно

Здравствуйте.
Пишу на Delphi 7 WinAPI.
Имею окно класса static со стилем WS_VISIBLE or WS_CHILD or SS_BITMAP or SS_NOTIFY.
Нужно сделать это окно шестиугольным:

Читал, что для этого нужно создать несколько регионов и объединить их функцией CombineRegion(). Но не могу понять, как работает последняя и как вообще создать регионы, чтобы получить шестиугольник (или более сложную форму).
BLACK_RAIN вне форума Ответить с цитированием
Старый 12.02.2014, 12:23   #2
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

вроде дошло.
а как правильно сделать, чтобы вернуть окно в исходное состояние?
Код:
  DeleteObject(rgn);
  SetWindowRgn(Handle,rgn,True);
Или не так?
BLACK_RAIN вне форума Ответить с цитированием
Старый 12.02.2014, 13:04   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

SetWindowRgn(Handle, 0, True);
DeleteObject делать не надо.
waleri вне форума Ответить с цитированием
Старый 12.02.2014, 13:05   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

посмотрите пример, который рисует окошко в виде шестиконечной звезды.
(код не мой, я только выкладываю )

можно перетаскивать, изменять размер, прав.кн.мышки на регионе - About
двойной клик по региону звезды - закрытие.


p.s. извините, если мой пост "мимо кассы" и бесполезен для Вас...
Вложения
Тип файла: zip Star.zip (6.3 Кб, 14 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.02.2014, 13:28   #5
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
DeleteObject делать не надо.
А если регион больше не нужен, то надо?

Serge_Bliznykov
Всё-равно, будет интересно посмотреть.
BLACK_RAIN вне форума Ответить с цитированием
Старый 12.02.2014, 15:20   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
А если регион больше не нужен, то надо?
Если регион был передан в SetWindowRgn то нет - система сама удалит.
waleri вне форума Ответить с цитированием
Старый 13.02.2014, 10:29   #7
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Если регион был передан в SetWindowRgn то нет - система сама удалит.
Мне нужно изменять регион по таймеру в зависимости от позиции курсора мыши. То есть, после SetWindowRgn не надо удалять регион, а просто заново создавать новый CreateRectRgnIndirect?
Код:
    rgn := CreateRectRgnIndirect();              
    rgn2 := CreateRectRgnIndirect();                
    CombineRgn(rgn,rgn,rgn2,RGN_DIFF);
    DeleteObject(rgn2);
    SetWindowRgn(handle,Rgn,False);
// rgn не удаляем?
    rgn := CreateRectRgnIndirect();
BLACK_RAIN вне форума Ответить с цитированием
Старый 13.02.2014, 19:40   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Если честно - не пробовал а из документации не совсем понятно.
Насколько я понимаю, один раз отдав регион в окно уже не можем с ним работать.
Лучше всего протестировать - после задавания второго региона попробовать удалить первый и посмотреть вернет ли DeleteObject ошибку или нет...
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Треугольное окно со сторонами A, B, C. Проверить, пройдёт ли в окно коробка цилиндрической формы (D и H) (паскаль) ihimaru Помощь студентам 5 02.10.2011 22:11
[?] Послать клавишу в чужое окно, не выводя окно на передний план. Moriarty Win Api 4 21.02.2011 05:11
Открывать окно печати, окно просмотра и изменять масштаб. segail Microsoft Office Excel 1 08.08.2010 19:31
Шестиугольное игровое поле Кронос Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 18.07.2009 12:14
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28