我注意到在 GLFW3 的 Windows 端口中,无论当前窗口大小如何,都会调用_glfwInputFramebufferSize
和_glfwInputWindowSize
。 此外,窗口宽度/高度不存储在win32
结构中。 这可能会导致重复调用回调。
我建议更改win32_window.c
代码如下。
case WM_SIZE:
{
const GLFWbool iconified = wParam == SIZE_MINIMIZED;
const GLFWbool maximized = wParam == SIZE_MAXIMIZED ||
(window->win32.maximized &&
wParam != SIZE_RESTORED);
const int width = LOWORD(lParam);
const int height = HIWORD(lParam);
if (_glfw.win32.disabledCursorWindow == window)
updateClipRect(window);
if (window->win32.iconified != iconified)
_glfwInputWindowIconify(window, iconified);
if (window->win32.maximized != maximized)
_glfwInputWindowMaximize(window, maximized);
if (window->win32.width != width || window->win32.height != height) {
_glfwInputFramebufferSize(window, width, height);
_glfwInputWindowSize(window, width, height);
}
if (window->monitor && window->win32.iconified != iconified)
{
if (iconified)
releaseMonitor(window);
else
{
acquireMonitor(window);
fitToMonitor(window);
}
}
window->win32.iconified = iconified;
window->win32.maximized = maximized;
window->win32.width = width;
window->win32.height = height;
return 0;
}
这可能会破坏代码,有人可能会依赖这种行为。
这可能会破坏代码,有人可能会依赖这种行为。
您可能是对的,但是由于window
结构具有宽度/高度字段并且它们没有在 Windows 移植中初始化,我怀疑这只是一个(次要的)疏忽。
好的,我现在看到 X11 从 a7ff236 和 Cocoa 开始处理这个问题 - 从 1fe319d (#1085) 开始。
我认为 Windows 可以使用相同的技巧。
您是否有任何情况可以在大小未更改时调用此事件?
是的。 事实上,我在我的一个项目中遇到了这个问题,我最初打开一个 1x1 隐藏窗口,然后将其调整为适当的(计算的)大小,最后显示它。
通过这一系列操作,在设置窗口大小后,回调将被调用两次(第一次在调整大小后,第二次在显示时)。
最有用的评论
好的,我现在看到 X11 从 a7ff236 和 Cocoa 开始处理这个问题 - 从 1fe319d (#1085) 开始。
我认为 Windows 可以使用相同的技巧。
您是否有任何情况可以在大小未更改时调用此事件?