Как узнать, запускается ли WM_GETMINMAXINFO SIZE_RESTORED? - PullRequest
2 голосов
/ 05 февраля 2012

Я реализую ограничения окна для своей игры и столкнулся с небольшой проблемой.

Я использую этот код для установки ограничений:

case WM_GETMINMAXINFO:
     {
        LPMINMAXINFO p_info = (LPMINMAXINFO)lParam;
        RECT wRect;
        RECT cRect;
        int wWidth;
        int wHeight;
        int cWidth;
        int cHeight;
        int total_border_width;
        int total_border_height;
        POINT wmin, wmax;

        GetWindowRect(hWnd, &wRect);
        GetClientRect(hWnd, &cRect);
        wWidth = wRect.right - wRect.left;
        wHeight = wRect.bottom - wRect.top;
        cWidth = cRect.right - cRect.left;
        cHeight = cRect.bottom - cRect.top;
        total_border_width = wWidth - cWidth;
        total_border_height = wHeight - cHeight;

            wmin.x = (d->min_w > 0) ? d->min_w + (resize_is_restore ? -total_border_width : total_border_width) : p_info->ptMinTrackSize.x;
        wmin.y = (d->min_h > 0) ? d->min_h + total_border_height : p_info->ptMinTrackSize.y;
        wmax.x = (d->max_w > 0) ? d->max_w + total_border_width : p_info->ptMaxTrackSize.x;
        wmax.y = (d->max_h > 0) ? d->max_h + total_border_height : p_info->ptMaxTrackSize.y;

        p_info->ptMinTrackSize = wmin;
        p_info->ptMaxTrackSize = wmax;

            resize_is_restore = false;
     }
     break;

Проблема заключалась в том, чтоОграничение min_w не соблюдается при восстановлении окна.

Я понял, что в этой ситуации необходимо отменить общую ширину:

wmin.x = (d->min_w > 0) ? d->min_w + (resize_is_restore ? -total_border_width : total_border_width) : p_info->ptMinTrackSize.x;

К сожалению, я не могу установить resize_is_restore, потому что WM_SIZEсообщение отправляется после WM_GETMINMAXINFO.Есть ли способ узнать, что изменение размера происходит из-за восстановления перед установкой minmaxinfo?

Спасибо

Исправлено с помощью:

    /* Fix for when the window is restored */
    if (cWidth == 0 && cHeight == 0) {
        break;
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...