ZBLOG

window下让自己的程序实现chrom浏览器的f11全屏的功能

在 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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23253

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?