Yup, HWND_TOPMOST
делает это для меня. Вот фрагмент кода, который делает полноэкранное работу хорошо (и быстро) для меня:
bool enterFullscreen(HWND hwnd, int fullscreenWidth, int fullscreenHeight, int colourBits, int refreshRate) {
DEVMODE fullscreenSettings;
bool isChangeSuccessful;
RECT windowBoundary;
EnumDisplaySettings(NULL, 0, &fullscreenSettings);
fullscreenSettings.dmPelsWidth = fullscreenWidth;
fullscreenSettings.dmPelsHeight = fullscreenHeight;
fullscreenSettings.dmBitsPerPel = colourBits;
fullscreenSettings.dmDisplayFrequency = refreshRate;
fullscreenSettings.dmFields = DM_PELSWIDTH |
DM_PELSHEIGHT |
DM_BITSPERPEL |
DM_DISPLAYFREQUENCY;
SetWindowLongPtr(hwnd, GWL_EXSTYLE, WS_EX_APPWINDOW | WS_EX_TOPMOST);
SetWindowLongPtr(hwnd, GWL_STYLE, WS_POPUP | WS_VISIBLE);
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, fullscreenWidth, fullscreenHeight, SWP_SHOWWINDOW);
isChangeSuccessful = ChangeDisplaySettings(&fullscreenSettings, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL;
ShowWindow(hwnd, SW_MAXIMIZE);
return isChangeSuccessful;
}
Обратите внимание, что это изменит решение, если вы скажете ему неправильные настройки. Это то, что я обычно хочу, но если вам не нравится, что вы можете найти свое разрешение, используя (где mainWindow
возвращается из чего-то вроде CreateWindow()
или CreateWindowEx()
):
windowHDC = GetDC(mainWindow);
fullscreenWidth = GetDeviceCaps(windowHDC, HORZRES);
fullscreenHeight = GetDeviceCaps(windowHDC, VERTRES);
colourBits = GetDeviceCaps(windowHDC, BITSPIXEL);
refreshRate = GetDeviceCaps(windowHDC, VREFRESH);
Если вы хотите, чтобы выйти полного экрана вы делаете что-то вроде этого:
bool exitFullscreen(HWND hwnd, int windowW, int windowY, int windowedWidth, int windowedHeight, int windowedPaddingX, int windowedPaddingY) {
bool isChangeSuccessful;
SetWindowLongPtr(hwnd, GWL_EXSTYLE, WS_EX_LEFT);
SetWindowLongPtr(hwnd, GWL_STYLE, WS_OVERLAPPEDWINDOW | WS_VISIBLE);
isChangeSuccessful = ChangeDisplaySettings(NULL, CDS_RESET) == DISP_CHANGE_SUCCESSFUL;
SetWindowPos(hwnd, HWND_NOTOPMOST, windowX, windowY, windowedWidth + windowedPaddingX, windowedHeight + windowedPaddingY, SWP_SHOWWINDOW);
ShowWindow(hwnd, SW_RESTORE);
return isChangeSuccessful;
}
Я установил свой код для переключения между полноэкранным и оконным режимом с помощью горячих клавиш, и я держать оконный переменные режим, как глобальные, так что при переходе на оконном режим, он остается включенным.
Этот код имеет то преимущество, что работает в эквиваленте «эксклюзивного режима» (я использую XP и не пробовал его в новых версиях окон), что означает, что это будет много, Быстрее. Дайте мне знать, если я сделал какие-либо ошибки от сжатия кода (из моего гораздо большего кода).
-1, потому что вы не должны возиться с панелью задач; он не нужен в первую очередь; см. блог Раймонда Чена об этом здесь: [Как покрыть панель задач полноэкранным окном?] (http://blogs.msdn.com/b/oldnewthing/archive/2005/05/05/414910.aspx) – BrendanMcK
@ BrendanMcK: Я отредактировал свой ответ. Хорошего дня. –
Awesome, -1 преобразован в +1. (На самом деле, я был слишком быстр с этим -1, в первую очередь, мне следовало только что оставить комментарий. Я думаю, что на протяжении многих лет я стал слишком чувствительным к просмотру оконных хаков!) – BrendanMcK