ImGui如何设置静态窗口大小并禁用用户调整窗口功能?
禁用DX10 ImGui窗口的用户调整尺寸功能
要禁用用户调整窗口尺寸的功能,核心是修改创建窗口时的窗口样式——你当前使用的WS_OVERLAPPEDWINDOW包含了WS_THICKFRAME(允许拖动边框调整尺寸)和WS_MAXIMIZEBOX(最大化按钮),这两个样式是导致窗口可调整的关键。
方法一:创建窗口时直接指定不可调整的样式
把WS_OVERLAPPEDWINDOW替换为不含尺寸调整相关的样式组合,比如保留标题栏、系统菜单和最小化按钮(如果不需要最小化按钮也可以去掉WS_MINIMIZEBOX):
HWND hwnd = ::CreateWindowW(wc.lpszClassName, L"Micheal's Application", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, 100, 100, 600, 800, NULL, NULL, wc.hInstance, NULL);
方法二:动态修改已创建窗口的样式
如果需要在程序运行过程中切换窗口是否可调整,可以用SetWindowLongPtr修改样式:
// 获取当前窗口样式 LONG_PTR currentStyle = GetWindowLongPtr(hwnd, GWL_STYLE); // 移除允许调整尺寸和最大化的样式 currentStyle &= ~(WS_THICKFRAME | WS_MAXIMIZEBOX); // 应用新样式 SetWindowLongPtr(hwnd, GWL_STYLE, currentStyle); // 刷新窗口框架,让样式变更生效 SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
这样修改后,用户就无法通过拖动边框或点击最大化按钮来改变窗口尺寸了,窗口会保持你设置的600*800初始大小。
内容的提问来源于stack exchange,提问作者Micheal Nestor
相关产品推荐
相关产品推荐

