Windows调整大小和宽高比,在Windows Server 2012上不起作用

时间:2014-07-02 16:51:39

标签: windows winapi user-interface resize window-resize

我一直使用以下代码,在Windows中实现比率调整大小:

    case WM_SIZING:
    {
        //
        // Implements ratio resize.
        //
        if (window->is_internal_flag_set(Window::kWindowHasAspectRatio))
        {
            RECT * rect = (RECT *)lparam;
            double ratio = window->get_window_aspect_ratio();
            int adjusted_h;

            switch (wparam)
            {
                case WMSZ_BOTTOMRIGHT:
                case WMSZ_BOTTOMLEFT:
                case WMSZ_RIGHT:
                case WMSZ_LEFT:
                {
                    adjusted_h = (int)((double)window->m_frame_rect.width() / ratio);
                    rect->bottom = rect->top + adjusted_h + window->m_diff_y;
                    return 0;
                }
                case WMSZ_TOPLEFT:
                case WMSZ_TOPRIGHT:
                {
                    adjusted_h = (int)((double)window->m_frame_rect.width() / ratio);
                    rect->top = rect->bottom - adjusted_h - window->m_diff_y;
                    return 0;
                }
                case WMSZ_TOP:
                case WMSZ_BOTTOM:
                {
                    int adjusted_w = (int)((double)window->m_frame_rect.height() * ratio);
                    rect->right = rect->left + adjusted_w + window->m_diff_x;
                    return 0;
                }
            }
        }
        return 0;
    }

此代码在Windows XP和Windows 7中也能很好地运行。 我无法在Windows 8.x上尝试这个,但现在我在Windows Server 2012上,这根本不起作用。 Windows Server 2012使用正确的WM_SIZING消息调用窗口的调度程序函数,但它只是忽略了我通过lparam“给出”的矩形。 然而,一些奇怪的宽高比确实会发生,例如当我仅从底部调整窗口大小时,当我释放鼠标时Windows将设置一种宽高比,但是完全错误。

这段代码有什么问题?为什么我只在Windows Server 2012上遇到问题?

注意:为了简洁起见,我省略了你在那里看到的Window类的代码。无论如何,理解代码非常简单。

0 个答案:

没有答案