![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: нет Всего: 8 |
Сабж. Нужно сделать интерфейс с фоном в виде PNG с различной прозраностью. О-кей, с помощью UpdateLayeredWindow сделали. Но нужно разместить видимые контролы на нем.
Это http://www.codeproject.com/Articles/42032/...logs-with-Stand смотрел, много гуглил, да. ColorKey использовать не вариант, потому что пиксели контролов будут "проваливаться", интерфейс полностью графический и многоцветовой. Решил использовать Shaped Window, оставляя окно только под контролами. Работает. Теперь к проблемам: Необходимо реализовать все это на чистом WinApi. ATL/WTL не использовать. Если создавать окно с контролами как дочернее и как popup окно от того, что с пнгшкой - то оно само не передвигается за фоном. Не беда, SetWindowPos. Но в MSDN'е написано, что WS_CHILD и WS_POPUP одновременно использовать нельзя, следовательно - грязный хак, хоть и работает в XP и Windows 8. Плюс фокус странно прыгает от окна с фоном, до окна с контролами. По альт+ф4 то закрывается окно с контролами, то фон. Иногда, если поверх открыть другое окно и тыкать по кнопке приложения в таскбаре, то оно не появляется. Вообщем, извращений много. Если же создавать окно с контролами само по себе и самому передвигать его на позицию фона, то возникают проблемы с ZOrder'ом и при передвижении окна моргают, то одно, то другое показывается. Флаг SWP_NOACTIVATE у SetWindowPos не работает. И если тыкать по фону, то окно с контролами проваливается под него и его становится не видно. WS_EX_NOACTIVATE не работает почему-то тоже. Вообщем у кого какие идеи? Это сообщение отредактировал(а) Randajad - 15.3.2012, 13:10 |
|||
|
||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: нет Всего: 8 |
Ай! Я ошибся разделом! Прошу модераторов меня пощадить и перенести темку.
|
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
это не хак, просто WS_CHILD (или оба флага) система игнорирует, и если кодеры этого не поймут, через пару-тройку версий это будет приводить к NULL в ответ на вызов CreateWindow, по типу правил ужесточения требований к API, когда все рекомендации "should not be" переходят в правила "must not be"
как следствие первого - это простое перекрытое окно или попап, он не должен ни двигаться за окном-владельцем, ни иметь с ним один фокус отсюда можно поподробнее, можно даже с кодом
значит контрол - простое перекрытое (overlapped) окно, а не popup, popup-контролы не проваливаются под владельца, такая у них фишка, вобщем, надо смотреть код -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: нет Всего: 8 |
Да нет, хак.
Ибо окошко таки получается не отдельное, а дочернее и не проваливается. Темка вновь актуальна. Извиняюсь, раньше времени не было на это. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
а ты случаем не забыл, что используешь SetWindowPos? с чего это оно стало дочерним-то? только потому, что ты сам таскаешь это окно за владельцем? ну просто не существует дочерних попап окон (как и перекрытых), смирись, и ни каких хаков комбинацией windows-флагов сделать не получится -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: нет Всего: 8 |
Окно с контролами не проваааааливается под фон если указывать WS_CHILD + HWND окна-родителя.
Если не указывать - это обычные два окна и при клике на одно из них другое на второй план уходит. Я понимаю, что нельзя, но этот эффект есть! |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
если WS_CHILD, без WS_POPUP, то оно и не должно проваливаться, это же обычное дочернее окно -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Layered окно должно быть еще со стилем WS_EX_LAYERED | WS_EX_TRANSPARENT и WS_POPUP
и показывать его как ShowWindow(hWnd, SW_SHOWNOACTIVATE); Это сообщение отредактировал(а) Dem_max - 28.6.2012, 17:55 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |