2010-08-23 3 views
2

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

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

У меня есть приложение, которое должно быть на весь экран. Я использую 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 для переключения на другое приложение на своем компьютере. Мое приложение сводилось к минимуму. Это работает хорошо. Затем я возвращаюсь к своему приложению, и он появляется в полноэкранном режиме. Опять же, он работает хорошо. Но если я хочу еще раз переключиться на другое приложение, мои статуты приложений в полноэкранном режиме скрывают все остальные приложения на моем компьютере.

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

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

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

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

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

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

+0

Просто для удовольствия, что происходит, когда вы нажимаете F11 на клавиатуре? – JustBoo

+0

@JustBoo: просто ничего ... Моя цель - заставить мое приложение находиться в полноэкранном режиме, так как оно активировано. Если я нажму F11, когда мое приложение вставлено ... Это уже в полноэкранном режиме ... Таким образом, клавиша F11 не действует. –

+0

См. Новое изменение ниже. Это должно позволить вам увидеть, в каком состоянии находится окно, и соответственно отрегулировать (свернуть). С надеждой. – JustBoo

ответ

3

Эти ребята выглядят как, чтобы охватить все возможности.

Win32: full-screen and hiding taskbar


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

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

+0

Спасибо за ответ. Это помогает. У меня нет окончательного решения, но ссылка полезна. –

+0

Это очень полезно. Я уже ловил WM_ACTIVATE, но не знал о GetWindowPlacement(). Это именно то, что мне нужно. Большое спасибо JustBoo, ​​я думаю, что с успехом сделаю то, что хочу, благодаря вашей помощи. Это действительно оценено. –

0

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

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

+0

В моем случае удаление WS_EX_TOPMOST ничего не меняет. Во второй раз, когда я хочу свести к минимуму его, окно все равно будет находиться на переднем плане в полноэкранном режиме. –

-4
  • Если вы используете приложение для киоска, экран уже настроен на идеальное/правильное разрешение.

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

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

+0

Я не в приложении Kiosk, и я уже использую GetSystemMetrics(), чтобы получить разрешение экрана, чтобы сделать мое окно полноэкранным. И у меня нет проблем с панелью задач. Моя проблема заключается в том, что полноэкранное окно не хочет минимизироваться при первом переключении приложения. –

Смежные вопросы