Yup, HWND_TOPMOST
tut es für mich. Hier ist ein Codeabschnitt, der im Vollbildmodus arbeiten gut (und schnell) für mich macht:
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;
}
Beachten Sie, dass dies die Auflösung ändern, wenn Sie die falschen Einstellungen erzählen. Dies ist, was ich in der Regel wollen, aber wenn Sie das nicht möchten, können Sie Ihre Auflösung herausfinden, unter Verwendung von (wo mainWindow
von so etwas wie CreateWindow()
oder CreateWindowEx()
zurückgegeben):
windowHDC = GetDC(mainWindow);
fullscreenWidth = GetDeviceCaps(windowHDC, HORZRES);
fullscreenHeight = GetDeviceCaps(windowHDC, VERTRES);
colourBits = GetDeviceCaps(windowHDC, BITSPIXEL);
refreshRate = GetDeviceCaps(windowHDC, VREFRESH);
Wenn Sie aussteigen wollen Vollbild-tun Sie etwas wie folgt aus:
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;
}
stelle ich meinen Code zwischen Vollbild- und fenster~~POS=TRUNC mit einem Hotkey, und ich halte die fenster~~POS=TRUNC Variablen als global zu ändern, so dass bei einem Wechsel zu fenster~~POS=TRUNC Modus bleibt es gesetzt.
Dieser Code hat auch den Vorteil, im Äquivalent von "exklusiven Modus" (ich benutze XP, und habe es nicht auf den neueren Versionen von Windows), was bedeutet, es wird viel, viel schneller. Lass mich wissen, wenn ich Fehler gemacht habe, wenn ich den Code verdichte (von meinem viel größeren Code).
-1 weil Sie nicht mit der Taskleiste herumspielen sollten; es ist nicht in erster Linie erforderlich; Den Blog von Raymond Chen finden Sie hier: [Wie bedecke ich die Taskleiste mit einem Vollbild-Fenster?] (http://blogs.msdn.com/b/oldnewthing/archive/2005/05/05/414910.aspx) – BrendanMcK
@ BrendanMcK: Ich habe meine Antwort bearbeitet. Haben Sie einen guten Tag. –
Awesome, -1 in +1 umgewandelt. (Eigentlich war ich ein bisschen zu schnell mit dieser -1 an erster Stelle; ich hätte den Kommentar zuerst abgeben sollen. Ich glaube, ich bin überempfindlich geworden, Windows-Hacks über die Jahre zu sehen -!) – BrendanMcK