您只需要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);
}
}
Run Code Online (Sandbox Code Playgroud)
或者以初始全屏尺寸显示:
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);
Run Code Online (Sandbox Code Playgroud)
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调整边界的大小.在全屏模式下,窗口通常没有边框.在最大化模式下,边框落在视图区域之外.
更多细节:窗口样式
“全屏”模式是一种特殊模式,其中游戏接管整个显示并且不尝试以任何方式与其他窗口合作。这是过去所有游戏的工作方式,更灵活(您的游戏分辨率不必与桌面分辨率匹配)并且理论上更快。实际上,当您使用 alt-tab 等操作时,它会导致很多问题。在某些情况下,您可能会发现游戏窗口仍然显示您何时应该使用其他应用程序。
“无边框”创建一个普通窗口,但没有占据整个屏幕的标题栏或边框。视觉上这应该与全屏相同,但避免了互操作问题。你可以在它上面放其他东西(例如任务管理器),你可以很高兴地使用 alt-tab。缺点是它可能会更慢,因为 Windows 参与了绘图过程,并且您会被用户的桌面分辨率所困扰。
'Windowed' 是一个普通的 Windows 窗口,它总是有一个标题栏,并且可能有调整大小的句柄、最小化按钮等。这也可能在最大化时占据整个屏幕,但实际可用区域较小,因为标题栏/关闭按钮/边框会丢失一些空间。
屏幕模式通常是 Windows 级别的东西,而不是 openGL。
要获得窗口模式,您可以使用 CreateWindowEx() 并传递 WS_OVERLAPPED 样式。要获得无边框,您可以使用 WS_POPUP 样式的相同功能。理论上,无论如何。我已经看到视频驱动程序给你全屏。要获得全屏,您通常应用 ChangeDisplaySettings(blah,CDS_FULLSCREEN) 来切换到您想要的视频模式。