当前位置:  开发笔记 > 开发工具 > 正文

全屏与无边框窗口

如何解决《全屏与无边框窗口》经验,为你挑选了1个好方法。

我的目标是创建一个OpenGL应用程序.我见过许多游戏让用户决定"游戏窗口"是"全屏"还是"无边框".有什么不同?我如何实现每种方法?

我听说全屏窗口只是具有WS_POPUP样式的窗口,它被设置为屏幕的宽度和高度.这只适用于我上面提到的其中一种方法吗?

"无边框"和"全屏"之间有什么区别?(截图取自LoL) IMG



1> Barmak Shemi..:

您只需要WS_POPUP和全屏宽度和高度来隐藏任务栏.以下是在窗口显示后更改窗口样式的示例:

if (msg == WM_LBUTTONDOWN)
{
    if (GetWindowLongPtr(hwnd, GWL_STYLE) & WS_POPUP)
    {
        SetWindowLongPtr(hwnd, GWL_STYLE, WS_VISIBLE | WS_OVERLAPPEDWINDOW);
        SetWindowPos(hwnd, NULL, 0, 0, 600, 400, SWP_FRAMECHANGED);
    }
    else 
    {//show full-screen
        int w = GetSystemMetrics(SM_CXSCREEN);
        int h = GetSystemMetrics(SM_CYSCREEN);
        SetWindowLongPtr(hwnd, GWL_STYLE, WS_VISIBLE | WS_POPUP);
        SetWindowPos(hwnd, HWND_TOP, 0, 0, w, h, SWP_FRAMECHANGED);
    }
}

或者以初始全屏尺寸显示:

int w = GetSystemMetrics(SM_CXSCREEN);
int h = GetSystemMetrics(SM_CYSCREEN);
HWND hmain = CreateWindow(L"className", L"title", WS_POPUP, 0, 0, w, h, 0, 0, hInst, 0);
ShowWindow(hmain, SW_SHOW);

Windows是WS_OVERLAPPED,WS_POPUPWS_CHILD.这三个标志不能相互组合,但可以与其他WS_XXXX标志组合使用.

顶端Windows要么WS_OVERLAPPEDWS_POPUP不同风格的主窗口包括:

普通窗口:WS_OVERLAPPED,显示为ShowWindow(hwnd, SW_SHOW)

最大化窗口:WS_OVERLAPPED,ShowWindow(hwnd, SW_MAXMIZE)覆盖整个屏幕,不包括任务栏

全屏:WS_POPUP标志,宽度和高度设置为SM_CXSCREEN/ SM_CYSCREEN,覆盖整个屏幕,它遍历任务栏

所有这些窗户都可以有WS_BORDER或没有.或者他们可能有WS_THICKFRAME调整边界的大小.在全屏模式下,窗口通常没有边框.在最大化模式下,边框落在视图区域之外.

更多细节:窗口样式

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有