在 Windows 平台上,要让自己的程序实现类似 Chrome 浏览器 F11 全屏 的功能(即窗口最大化并隐藏标题栏、边框等 UI),可以通过以下方式实现:
1. Win32 API 实现全屏模式
使用 SetWindowLong + ShowWindow + AdjustWindowRectEx 来控制窗口样式和尺寸。
关键代码示例 (C++)
#include <windows.h>
// 进入全屏模式
void EnterFullscreen(HWND hwnd) {
// 1. 获取当前窗口样式
LONG_PTR style = GetWindowLongPtr(hwnd, GWL_STYLE);
LONG_PTR exStyle = GetWindowLongPtr(hwnd, GWL_EXSTYLE);
// 2. 移除标题栏、边框等样式
style &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU);
// 3. 设置新样式(无边框)
SetWindowLongPtr(hwnd, GWL_STYLE, style);
// 4. 获取屏幕分辨率
int screenWidth = GetSystemMetrics(SM_CXSCREEN);
int screenHeight = GetSystemMetrics(SM_CYSCREEN);
// 5. 调整窗口位置和大小(覆盖整个屏幕)
SetWindowPos(
hwnd,
HWND_TOP,
0,
0,
screenWidth,
screenHeight,
SWP_FRAMECHANGED | SWP_SHOWWINDOW
);
ShowWindow(hwnd, SW_MAXIMIZE);
}
// 退出全屏模式(恢复原始状态)
void ExitFullscreen(HWND hwnd) {
// TODO: 恢复之前的窗口样式和大小...
}
2. DirectX / OpenGL / Qt / WPF
如果你的程序使用了 GUI框架,可以调用对应的全屏方法:
(1) Qt (QWidget)
// QMainWindow/QWidget:
widget->setWindowState(Qt::WindowFullScreen); // F11式全屏
widget->showFullScreen(); // HTML5式全屏(仅内容)
(2) WPF (.NET C#)
this.WindowStyle = WindowStyle.None; //隐藏标题栏和边框
this.WindowState = WindowState.Maximized; //最大化到整个屏幕
(3) GLFW (OpenGL/Vulkan/DirectX游戏开发)
glfwMaximizeWindow(window); //最大化
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); //可选:锁定鼠标
3. WebView2 (Chromium Embedded - CEF/EdgeWebView2)
如果你嵌入了 Chromium内核:
- HTML5 Fullscreen API (
requestFullscreen()) - Win32 API (控制宿主窗口)
// Edge WebView2 (C++/WinRT)
webview.CoreWebView2->ExecuteScript(L"document.documentElement.requestFullscreen();");
4. Toggle功能(F11切换)
监听 WM_KEYDOWN,检测 VK_F11:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch(msg) {
case WM_KEYDOWN:
if(wParam == VK_F11) { // F11按键触发切换全屏/退出全屏
static bool isFullscreen = false;
if(!isFullscreen)
EnterFullscreen(hwnd);
else
ExitFullscreen(hwnd);
isFullscreen = !isFullscreen;
}
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
}
5. Chrome/Firefox的行为对比
| Chrome/Firefox F11 | Win32 API实现 | |
|---|---|---|
| UI隐藏 | ✅标签栏、地址栏消失 | ✅自定义哪些UI隐藏 |
| 快捷键 | F11自动绑定 | ❌需手动监听F11 |
| 兼容性 | ✔️跨平台 | ❌仅Windows |
总结
- Win32 API (
SetWindowLong,SetWindowPos) → 适合原生C++应用。 - Qt/WPF → 适合GUI框架应用。
- WebView2/CEF → 适合嵌入浏览器内核的应用。
如果需要完整的可编译代码示例,可以参考 Microsoft Docs 。
内容由零声教学AI助手提供,问题来源于学员提问




