Здравствуйте, lucifer_vrn, Вы писали:
_>Здравствуйте! _>Подскажите пожалуйста, как поместить кнопку или хотя бы просто нарисовать нечто в заголовке окна рядом с кнопками "закрыть", "свернуть", "развернуть"? _>Тут множество топиков про это, равно как и в гугле, но тут есть одна проблема — они не работают по Windows Vista/ Windows Seven, т.е. под Aero(если его отключить то все работает). А меня интересует именно под висту, если под более раними осями работать не будет — не страшно.
Aero не позволяет рисовать в неклиенской области окна (при попытке это сделать Aero отключается), зато рамку можно расширить в клиентскую область.
Поэтому:
1) путем обработки WM_NCCALCSIZE системе внушается, что клиентская область окна занимает все окно.
2) с помощью DwmExtendFrameIntoClientArea() восстанавливаем визуально исходный размер рамки.
3) теперь остается сущая мелочь — самостоятельно реализовать всю функциональность неклиенской области, которая ушла лесом из-за п.1.
4) и сущая мелочь номер два — доработать напильником рисование клиентской области, чтобы на месте рамки рисовалось только то, что нужно.
Re[3]: Кнопки в заголовок окна для Windows Vista/7(Aero)
Здравствуйте!
Подскажите пожалуйста, как поместить кнопку или хотя бы просто нарисовать нечто в заголовке окна рядом с кнопками "закрыть", "свернуть", "развернуть"?
Тут множество топиков про это, равно как и в гугле, но тут есть одна проблема — они не работают по Windows Vista/ Windows Seven, т.е. под Aero(если его отключить то все работает). А меня интересует именно под висту, если под более раними осями работать не будет — не страшно.
Здравствуйте, Sergei I. Gorelkin, Вы писали:
SIG>Здравствуйте, lucifer_vrn, Вы писали:
_>>Здравствуйте! _>>Подскажите пожалуйста, как поместить кнопку или хотя бы просто нарисовать нечто в заголовке окна рядом с кнопками "закрыть", "свернуть", "развернуть"? _>>Тут множество топиков про это, равно как и в гугле, но тут есть одна проблема — они не работают по Windows Vista/ Windows Seven, т.е. под Aero(если его отключить то все работает). А меня интересует именно под висту, если под более раними осями работать не будет — не страшно.
SIG>Aero не позволяет рисовать в неклиенской области окна (при попытке это сделать Aero отключается), зато рамку можно расширить в клиентскую область. SIG>Поэтому: SIG>1) путем обработки WM_NCCALCSIZE системе внушается, что клиентская область окна занимает все окно. SIG>2) с помощью DwmExtendFrameIntoClientArea() восстанавливаем визуально исходный размер рамки. SIG>3) теперь остается сущая мелочь — самостоятельно реализовать всю функциональность неклиенской области, которая ушла лесом из-за п.1. SIG>4) и сущая мелочь номер два — доработать напильником рисование клиентской области, чтобы на месте рамки рисовалось только то, что нужно.
2 и 3 с теми или иными нюансами у меня было сделанно.
4 немогу начать пока остальное не сделаю.
вот за пункт 1 большое спасибо! Попытался реализовать сие дело:
вообще плохо понял как правильно реализовывать WM_NCCALCSIZE... в моей реализации главный косяк, что я еще случай с wParam == FALSE не обрабатываю, но он вроде и не приходит.
Так вот при этой реализции:
1. кнопки системного меню свернуть закрыть итд остались — что есть великолепно!
2. окно нормально ресайзиться
3. Но когда пытаюсь переместить окно(за клиентскую часть у меня реализация этого была) оно у меня начинает увеличивать размер. Видимо дело в том что я в WM_NCCALCSIZE чето не правильно считаю...
4. После перемещение/ресайза окна — кнопки закрыть/свернуть начинают работать только со второго клика, т.е. первый раз нажимаю чето происходит второй раз жму он выполянет.
Подскажите пожалуйста как правильно реализовать WM_NCCALCSIZE?
Re[2]: Кнопки в заголовок окна для Windows Vista/7(Aero)
Здравствуйте, Sergei I. Gorelkin, Вы писали:
SIG>Aero не позволяет рисовать в неклиенской области окна (при попытке это сделать Aero отключается), зато рамку можно расширить в клиентскую область.
Какого блин фига !?
Я уже 3 день мучаюсь, и чего-это у меня аэро само вырубается...
а где об этом на сайте микрософт?
Re[3]: Кнопки в заголовок окна для Windows Vista/7(Aero)
Здравствуйте, 23W, Вы писали:
23W>Здравствуйте, Sergei I. Gorelkin, Вы писали:
SIG>>Aero не позволяет рисовать в неклиенской области окна (при попытке это сделать Aero отключается), зато рамку можно расширить в клиентскую область. 23W>Какого блин фига !? 23W>Я уже 3 день мучаюсь, и чего-это у меня аэро само вырубается...
23W>а где об этом на сайте микрософт?
Здравствуйте, о_О, Вы писали:
о_О>Здравствуйте, 23W, Вы писали:
о_О>2012й год. не можем справиться с аэро. так держать!
Если вы напишите как, буду очень признателен. По практике знаю что такое возможно, например тот же TeamView добавляет свою кнопку к любому окну в системе (не только к своим) и при этом еще обеспечивает для них гало-свечение за пределами рамки, как у системных кнопок. Но КАК ?
(п.с. рецепт через убивание неклиентской зоны и натягивания рамки на клиентскую зону через DwmExtendFrameIntoClientArea() — не предлагать, это не то что нужно).
Re[6]: Кнопки в заголовок окна для Windows Vista/7(Aero)
Здравствуйте, 23W, Вы писали:
23W>(п.с. рецепт через убивание неклиентской зоны и натягивания рамки на клиентскую зону через DwmExtendFrameIntoClientArea() — не предлагать, это не то что нужно).
а по другому никак, TeamViewer просто проверяет, что активно аэро и сабклассит окна в системе.
Здравствуйте, lucifer_vrn, Вы писали:
_>Здравствуйте! _>Подскажите пожалуйста, как поместить кнопку или хотя бы просто нарисовать нечто в заголовке окна рядом с кнопками "закрыть", "свернуть", "развернуть"? _>Тут множество топиков про это, равно как и в гугле, но тут есть одна проблема — они не работают по Windows Vista/ Windows Seven, т.е. под Aero(если его отключить то все работает). А меня интересует именно под висту, если под более раними осями работать не будет — не страшно.
Там надо использовать буферизованный вывод графики.
Не знаю, наскоко он хорошо будет работать с неклиенткой, но в таскбар я рисовал в Аеро.
Искать по BufferedPaintInit сотоварищи.
Причём там хитро рисуется — чем темнее цвет, тем он прозрачнее. Исключение только для функций работы с текстом, точнее надо использвать именно специальные текстовые функции, обычные будут как раз с эффектом прозрачности. Ну, вобщем, у меня так получалось, можь чё не так делал
Re[7]: Кнопки в заголовок окна для Windows Vista/7(Aero)
Здравствуйте, Visor2004, Вы писали:
V>Здравствуйте, 23W, Вы писали:
23W>>(п.с. рецепт через убивание неклиентской зоны и натягивания рамки на клиентскую зону через DwmExtendFrameIntoClientArea() — не предлагать, это не то что нужно).
V>а по другому никак, TeamViewer просто проверяет, что активно аэро и сабклассит окна в системе.
Нет, TeamViewer так не делает... поверхностный анализ на основе PhotoShop CS 5.1 показал, что teamview просто укладывает поверх капшиона программы свое layerd окно и именно в нем рисует доп. кнопки. При этом эффект гало-свечения кнопки (как у кнопок закрытт/свернуть/максимизировать) просто эмулируется, причем не совсем точно.