Sí, HWND_TOPMOST
lo hace por mí. Aquí es una sección de código que hace bien el trabajo de pantalla completa (y rápido) para mí:
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;
}
Tenga en cuenta que esto va a cambiar la resolución si le dice que la configuración incorrecta. Esto es lo que yo quiero por lo general, pero si no te gusta eso, se puede averiguar su resolución mediante el uso de (donde mainWindow
se devuelve desde algo así como CreateWindow()
o CreateWindowEx()
):
windowHDC = GetDC(mainWindow);
fullscreenWidth = GetDeviceCaps(windowHDC, HORZRES);
fullscreenHeight = GetDeviceCaps(windowHDC, VERTRES);
colourBits = GetDeviceCaps(windowHDC, BITSPIXEL);
refreshRate = GetDeviceCaps(windowHDC, VREFRESH);
cuando se quiere salir de pantalla completa haces algo como esto:
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;
}
puse mi código para cambiar entre pantalla completa y modo de ventana usando una tecla de acceso directo, y guardo las variables de modo de ventana como global, de manera que cuando se cambia a de ventana modo, se mantiene.
Este código también tiene la ventaja de funcionar en el equivalente de "modo exclusivo" (estoy usando XP, y no lo he probado en las versiones más nuevas de Windows), lo que significa que será mucho, mucho Más rápido. Avíseme si cometí algún error al condensar el código (de mi código mucho más grande).
-1 porque no debería estar jugando con la barra de tareas; no es necesario en primer lugar; vea el blog de Raymond Chen sobre esto aquí: [¿Cómo cubro la barra de tareas con una ventana de pantalla completa?] (http://blogs.msdn.com/b/oldnewthing/archive/2005/05/05/4/4999.aspx) – BrendanMcK
@ BrendanMcK: he editado mi respuesta. Tenga un buen día. –
Increíble, -1 convertido a +1. (En realidad, era un poco demasiado rápido con ese -1 en primer lugar, debería haber dejado el comentario primero. Creo que me volví demasiado sensible a los ataques de Windows a lo largo de los años:!) – BrendanMcK