Программная установка оконного стиля
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Очередной мой вопрос по этой среде программирования.
Есть диалоговое окно, в свойствах мжно установить TopMOst=TRUE, что значит что окно будет поверх всех окон (Always On Top). А как сделать это программно, что пользователь сам выбирал, хочет ли он чтоб програ ьыла поверх всех окон или нет.
Короче мне нужна функция которая будет это устанавливать или снимать. типа SetTopMost().
Есть диалоговое окно, в свойствах мжно установить TopMOst=TRUE, что значит что окно будет поверх всех окон (Always On Top). А как сделать это программно, что пользователь сам выбирал, хочет ли он чтоб програ ьыла поверх всех окон или нет.
Короче мне нужна функция которая будет это устанавливать или снимать. типа SetTopMost().
Насколько я помню есть функция SetWindowPlacement. У нее один из параметров может задавать положение окошка. Если есть вопросы - в MSDN.
Создаёшь окно функцией CreateWindowEx и в параметре dwExStyle указываешь константу WS_EX_TOPMOST.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Tima, SetWindowPlacement может разместить окно поверх остальных единожды, в то время, как Gelert'у необходимо постоянное положение сверху. Это можно обеспечить лишь изменением соответствующего стиля. Gelert, если у тебя есть доступ к коду, создающему окно, то воспользуйся подсказкой WinMain'а. Или же если окно уже создано, то его стиль можно поменять следующим образом:
Код: Выделить всё
DWORD dwStyle = ::GetWindowLong(hWnd, GWL_EXSTYLE);
dwStyle |= WS_EX_TOPMOST;
::SetWindowLong(hWnd, GWL_EXSTYLE, dwStyle);
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Gelert, я поменял название темы. Постарайся давать информативные заголовки, этим ты окажешь помощь людям, которые отвечают на твои вопросы.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Спасибо народ..
я тут еще покопался и нашел функцию SetWindowPos(...).
я тут еще покопался и нашел функцию SetWindowPos(...).
Мужчина должен уметь делать все, кроме как рожать детей и трахаться в задницу.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Gelert, следует оперировать стилями, а не положением окна. SetWindowPos хороша только если окно требуется поместить поверх всех однократно, например по какому-то событию. Как только пользователь щёлкнит мышкой по любому другому окну, наше окно скроется под новым. Так вот, если же нужно, чтобы окно висело поверх постоянно (как TaskManager), без установки стиля не обойтись!
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Romeo, У меня все запахало... там первым параметром ставишь setTopMost - константуи все работает. Окно постоянно поверх всех остальных.
Тут по ходу дела возник один вопросик. Я недавно програмлю вод Visual, еще не совсем освоился, в том примере что ты привел
я поэтому и не стал работать со стилями. Если не затруднит поясни.
Тут по ходу дела возник один вопросик. Я недавно програмлю вод Visual, еще не совсем освоился, в том примере что ты привел
как получить указатель на окно (hWnd), который идет в качетве первого параметра функции GetWindowLong???DWORD dwStyle = ::GetWindowLong(hWnd, GWL_EXSTYLE);
dwStyle |= WS_EX_TOPMOST;
::SetWindowLong(hWnd, GWL_EXSTYLE, dwStyle);
я поэтому и не стал работать со стилями. Если не затруднит поясни.
Мужчина должен уметь делать все, кроме как рожать детей и трахаться в задницу.
Romeo, вобщем у Gelert все получилось по SetWindowPos, а вот WinMain не прав. Gelert явно спросил
WS_EX_TOPMOST
Specifies that a window created with this style should be placed above all non-topmost windows and should stay above them, even when the window is deactivated. To add or remove this style, use the SetWindowPos function.
, а WinMain ответил что нужно вызывать CreateWindowEx - то есть использовать только один раз. А вот Romeo цитата из MSDN:нужна функция которая будет это устанавливать или снимать
WS_EX_TOPMOST
Specifies that a window created with this style should be placed above all non-topmost windows and should stay above them, even when the window is deactivated. To add or remove this style, use the SetWindowPos function.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Если пользуешься MFC или WTL, то используй метод ModifyStyleEx класса CWnd или CWindow соответственно.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.