Полноэкранное управление с WinAPI - PullRequest
3 голосов
/ 23 августа 2010

Как правильно использовать WinAPI для управления полноэкранным режимом окна Windows?

Вот моя проблема:

У меня есть приложение, которое должно быть полноэкранным.Я использую функцию ChangeDisplaySettings () (winuser.h) со значением CDS_FULLSCREEN, чтобы перевести мое окно в полноэкранный режим при получении WM_ACTIVATE с (wParam == WA_ACTIVE || wParam == WA_CLICKACTIVE):

DEVMODE dmScreenSettings;
memset (&dmScreenSettings, 0, sizeof (dmScreenSettings));
dmScreenSettings.dmSize = sizeof (dmScreenSettings);   
dmScreenSettings.dmPelsWidth = 1280;
dmScreenSettings.dmPelsHeight = 720;    
dmScreenSettings.dmBitsPerPel = 32;      
dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);

Я использую ту же функцию с CDS_RESETзначение, чтобы вернуть его в «нормальный» режим при получении WM_ACTIVATE с (wParam == WA_INACTIVE):

ChangeDisplaySettings(&dmScreenSettings, CDS_RESET);

Когда я впервые запускаю свое приложение, оно работает в полноэкранном режиме.Я использую ALT + TAB для переключения на другое приложение на моем компьютере.Мое приложение свернулось.Это работает хорошо.Затем я возвращаюсь к своему приложению, и оно появляется в полноэкранном режиме.Опять же, это работает хорошо.Но если я хочу вернуться к другому приложению еще раз, мое приложение регистрируется в полноэкранном режиме, скрывая все остальные приложения на моем компьютере.

Примечание: мое окно создается с помощью функции CreateWindowEx () со следующими параметрами:

DWORD dwExStyle = WS_EX_TOPMOST;
DWORD dwStyle = WS_VISIBLE | WS_POPUP;

1) Есть ли другой способ, кроме использования ChangeDisplaySettings () для изменения полноэкранного режима?

2) Использую ли я хорошие значения?

3) Есть ли что-нибудь, что я забыл сделать?

Заранее спасибо за все ваши ответы.С уважением,

Ответы [ 3 ]

4 голосов
/ 23 августа 2010

Эти парни кажутся , чтобы охватить все варианты.

Win32: полноэкранная и скрытая панель задач


Новое редактирование: На основе нового комментария попробуйте это.

Перехватите событие WM_ACTIVATE в вашем приложении для этого окна.В этом случае вызовите функцию GetWindowPlacement и, надеюсь, вы уже в пути.Обратите внимание на ссылку «SetWindowPlacement» внизу.

0 голосов
/ 23 августа 2010
  • Если вы используете приложение Kiosk, то экран уже настроен на идеальное / правильное разрешение.

  • Если вы не являетесь приложением для киоска, то вы не имеете никакого отношения к разрешению пользователей. Вместо этого: GetSystemMetrics, чтобы получить размер дисплея по умолчанию, и создать ваше окно без полей точно такого размера. Панель задач автоматически скрывается, и ваше приложение будет «полноэкранным».

Особенно сейчас, когда ЖК-панели популярны, разрешение экрана должно соответствовать разрешению панели, чтобы субпиксельное сглаживание работало - ala ClearType. Ваши приложения должны рисовать правильно при разрешении экрана, а не наоборот.

0 голосов
/ 23 августа 2010

Попробуйте без WS_EX_TOPMOST.

Всякий раз, когда вы активируете, вы автоматически становитесь окном переднего плана.

...