Windows 全屏与无边框窗口
我的目标是创建一个OpenGL应用程序。我看过很多游戏,让用户决定“游戏窗口”是“全屏”还是“无边界”。有什么区别?如何实现每种方法 我听说全屏窗口只是带有WS_弹出式风格的窗口,设置为屏幕的宽度和高度。这是否仅适用于我上面提到的其中一种方法 这里的“无边界”和“全屏”有什么区别?(截图取自LoL)Windows 全屏与无边框窗口,windows,winapi,Windows,Winapi,我的目标是创建一个OpenGL应用程序。我看过很多游戏,让用户决定“游戏窗口”是“全屏”还是“无边界”。有什么区别?如何实现每种方法 我听说全屏窗口只是带有WS_弹出式风格的窗口,设置为屏幕的宽度和高度。这是否仅适用于我上面提到的其中一种方法 这里的“无边界”和“全屏”有什么区别?(截图取自LoL) 您只需WS\u弹出窗口和全屏宽度和高度即可隐藏任务栏。以下是在显示窗口后更改窗口样式的示例: if (msg == WM_LBUTTONDOWN) { if (GetWindowLongPt
您只需
WS\u弹出窗口
和全屏宽度和高度即可隐藏任务栏。以下是在显示窗口后更改窗口样式的示例:
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);
窗口要么是WS\u重叠的
,WS\u弹出窗口
,要么是WS\u子窗口
。这三个标志不能相互组合,但它们可以与其他WS_XXXX
标志组合
顶部窗口是重叠的或弹出的,主窗口的不同样式包括:
- 正常窗口:
,与WS\u重叠
ShowWindow(hwnd,SW\u-SHOW)一起显示
- 最大化窗口:
,与WS\u重叠
覆盖整个屏幕,不包括任务栏ShowWindow(hwnd,SW\u MAXMIZE)一起显示
- 全屏:
标志,宽度和高度设置为WS\u POPUP
/SM\u CXSCREEN
,覆盖整个屏幕,它覆盖任务栏SM\u CYSCREEN
WS\u边框
。或者他们可能有WS_THICKFRAME
用于调整边框大小。在全屏模式下,窗口通常没有边框。在最大化模式下,边界位于视图区域之外
更多详细信息:全屏模式是一种特殊模式,游戏将占据整个屏幕,不会试图以任何方式与其他窗口合作。这是所有游戏的工作方式,更灵活(游戏分辨率不必与桌面分辨率匹配),理论上更快。实际上,当您使用alt-tab之类的键时,可能会导致很多问题。在某些情况下,当您应该使用其他应用程序时,游戏窗口仍会显示 “无边框”是一个普通窗口,但没有占据整个屏幕的标题栏或边框。在视觉上,这应该与全屏相同,但避免了互操作问题。你可以有其他的东西在上面(例如taskmanager),你可以很高兴地替换tab。缺点是,它可能会慢一些,因为Windows参与了绘图过程,并且您被用户的桌面分辨率所困扰 “Windowed”是一个普通的Windows窗口,它总是有一个标题栏,并且可能有大小调整手柄、最小化按钮等。最大化时,这可能会占用整个屏幕,但实际可用区域较小,因为标题栏/关闭按钮/边框会失去一些空间 屏幕模式通常是Windows级别的东西,而不是openGL 要获得窗口模式,请使用CreateWindowEx()并传递WS_重叠样式。 要实现无边界,请使用与WS_弹出式相同的函数。不管怎样,从理论上讲。我见过视频驱动程序给你全屏显示。
要获得全屏显示,您通常会应用ChangeDisplaySettings(布拉赫、CD_全屏)切换到所需的视频模式 一个全屏OpenGL窗口是无边界的,这是与任务栏重叠的唯一方式。唯一的区别是尺寸:)我不明白。全屏和无边框都有屏幕尺寸的大小。你能进一步解释一下吗?看来你是在问一个特定的游戏。这取决于他们如何定义全屏、窗口和无边界。我见过许多游戏使用这种方法。LoL不是唯一一个。谢谢,但这并不能完全回答我的问题。我编辑了我的问题,你能检查一下吗?我不知道用于游戏窗口的术语。一个窗口的显示方式只有这么多,我添加了更多关于窗口样式的详细信息的链接。这可能是相关的吗?不,
更改显示设置
与您在桌面上通过“高级显示设置”看到的内容相同。我认为DirectX和OpenGL为此有特殊的功能(SetDisplayMode
)。这可能与: