2012-05-20 3 views
1

Есть ли способ обеспечить минимальный размер (ширину и высоту) в окне?MoveWindow - минимальная ширина/высота?

Я видел приложения, которые не позволяют изменять размер их окон ниже точки и делать это без мерцания или чего-то еще. Кроме того, если разрешение было ниже этих минимумов, они не допускали бы максимизации и вместо этого восстанавливали бы себя, заполняя экран, но никогда не максимизировались.

Как это можно достичь?

+1

Попробуйте обработать 'WM_SIZING' и изменить его размер, если он собирается перейти. – chris

+0

@chris Пожалуйста, разместите пример и сделайте это ответом? –

+0

Оформить заказ [ответить] (http://stackoverflow.com/a/5314065/1019491). – Hindol

ответ

1

я не сделал это сам, но что-то, как это должно работать:

LRESULT CALLBACK WndProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg) 
    { 
     case WM_SIZING: 
     { 
      RECT r = *((RECT *)lParam); 

      if (r.right - r.left > MAX_WIDTH) 
       ((RECT *)lParam)->right = r.left + MAX_WIDTH; 

      if (r.bottom - r.top > MAX_HEIGHT) 
       ((RECT *)lParam)->bottom = r.top + MAX_HEIGHT; 

      break; 
     } 
    } 

    return DefWindowProc (hwnd, msg, wParam, lParam); 
} 

В принципе, если прямоугольник окна будет превышает максимальную ширину или высоту, он регулирует его и отправляет его на, поэтому он не должен вызывать мерцание. Опять же, я никогда не пробовал этого, поэтому я не совсем уверен.

Как указывает Лука, вы можете сэкономить много работы, обратившись к WM_GETMINMAXINFO, чтобы установить значения по умолчанию, а не изобретать колесо.

+0

Perfect. Сделал несколько корректировок, но кажется достаточно хорошим. –

+0

@ GRIGORE-TURBODISEL, если вы публикуете свои настройки, я могу обновить свой ответ, чтобы помочь тем, кто ищет искомое решение winapi в будущем. – chris

+0

Сделал пару «GetSystemMetrics()», чтобы обеспечить достаточное пространство на экране, чтобы обеспечить соблюдение этих минимумов. Там также есть 'lpfnWndProc', потому что я потратил некоторое время на его поиск, и я пытаюсь понять, что происходит при максимизации окна. Извините, если я пою, как полный noob, но я нахожусь в первые дни настольного программирования. –

0

Вы можете использовать GetWindowRect проверить размер окна, и если оно больше или меньше, чем вы хотите, вы можете просто использовать SetWindowLong и добавьте DS_FIXEDSYS так что вы будете блокировать изменение размера окна

Смежные вопросы