我的目标是创建一个OpenGL应用程序.我见过许多游戏让用户决定"游戏窗口"是"全屏"还是"无边框".有什么不同?我如何实现每种方法?
我听说全屏窗口只是具有WS_POPUP样式的窗口,它被设置为屏幕的宽度和高度.这只适用于我上面提到的其中一种方法吗?
"无边框"和"全屏"之间有什么区别?(截图取自LoL)
您只需要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_POPUP
或WS_CHILD
.这三个标志不能相互组合,但可以与其他WS_XXXX
标志组合使用.
顶端Windows要么WS_OVERLAPPED
或WS_POPUP
不同风格的主窗口包括:
普通窗口:WS_OVERLAPPED
,显示为ShowWindow(hwnd, SW_SHOW)
最大化窗口:WS_OVERLAPPED
,ShowWindow(hwnd, SW_MAXMIZE)
覆盖整个屏幕,不包括任务栏
全屏:WS_POPUP
标志,宽度和高度设置为SM_CXSCREEN
/ SM_CYSCREEN
,覆盖整个屏幕,它遍历任务栏
所有这些窗户都可以有WS_BORDER
或没有.或者他们可能有WS_THICKFRAME
调整边界的大小.在全屏模式下,窗口通常没有边框.在最大化模式下,边框落在视图区域之外.
更多细节:窗口样式