Как запретить изменять размер окна
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.84] |
|
|
Правила раздела Visual C++ / MFC / WTL (далее Раздела)
FAQ Раздела
Обновления для FAQ Раздела
Поиск по Разделу
MSDN Library Online
Как запретить изменять размер окна
|
Сообщ.
#1
,
|
|
|
|
Доброго времени суток!
В VS2010 столкнулся с проблемой, которая раньше вообще не была проблемой. Суть: необходимо запретить пользователю изменять размер окна. Пробовал двумя способами: 1) ![]() ![]() SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0, SWP_NOSIZE); не работает, даже если нолики заменить реальными координатами. 2) это в событиях (Events) закомментировать строки изменения, типа: ![]() ![]() CDialogEx::OnSizing(fwSide, pRect); и ![]() ![]() CDialogEx::OnSize(nType, cx, cy); Как мне это сделать, как запретить изменение размера окна? Это я туплю или VS2010 издевается? )) |
|
Сообщ.
#2
,
|
|
|
|
Ты тупишь. OnGetMinMaxInfo
|
|
Сообщ.
#3
,
|
|
|
|
OnGetMinMaxInfo только возвращает информацию о положении и размере окна, а не изменяет ее. То есть не подходит )
|
|
Сообщ.
#4
,
|
|
|
|
Цитата Silver Soft @ только возвращает информацию Цитата MSDN Windows fills in an array of points specifying default values for the various positions and dimensions. The application may change these values in OnGetMinMaxInfo если че |
|
Сообщ.
#5
,
|
|
|
|
Однако криво читал MSDN)) Всем огромное спасибо! )
Добавлено Еще просьба! По этой функции есть вопросы: ![]() ![]() lpMMI->ptMaxTrackSize.x = 250; lpMMI->ptMaxTrackSize.y = 400; CDialogEx::OnGetMinMaxInfo(lpMMI); все работает, указываю теперь минимальный размер: ![]() ![]() lpMMI->ptMinTrackSize.x = 250; lpMMI->ptMinTrackSize.y = 400; lpMMI->ptMaxTrackSize.x = 250; lpMMI->ptMaxTrackSize.y = 400; CDialogEx::OnGetMinMaxInfo(lpMMI); почему при этом размер окна в y-координате существенно увеличивается? цифры же одинаковые... |
|
Сообщ.
#6
,
|
|
|
|
может до этого размер окна по вертикали меньше 400?
|
|
Сообщ.
#7
,
|
|
|
|
да, там 300, но если я в макс указываю 291, то слишком маленькое получается..
а почему она меняет то? я же ведь указываю новые значения, а не прошу их сложить?! |
|
Сообщ.
#8
,
|
|
|
|
Ну ты указываешь минимальный размер 400, логично, что если текущий размер меньше указанного тобой минимального, то окно должно увеличиться?
|
|
Сообщ.
#9
,
|
|
|
|
Логично.. тогда я не понимаю, почему координата x не глючит?
сейчас задал у "x" заведомо увеличенное значение, координата увеличилась ровно на то значение.. а тут вообще чушь какая-то.. я с помощью GetClientRect узнал высоту окна, ее устанавливаю в min и max, но окошко укрощается, что даже кнопки все невидно, то есть высоту выдает неправильную, а ширину правильную... Мысль пошла в сторону, что заголовок не учитывается, но укрощается окошко на много больше, чем высота заголовка.... В общем, я вообще ничего не понял )) почему "y" так себя ведет! |
|
Сообщ.
#10
,
|
|
|
|
Ты не учитываешь не только высоту заголовка, а вообще всю неклиентскую область, в которую входит и меню. Размеры окна, вместе с неклиентской частью возвращает GetWindowRect
|
|
Сообщ.
#11
,
|
|
|
|
B.V., действительно )) Сразу все встало на свои места! теперь все работает отлично ))
Огромное спасибо B.V. и Uncle_Bob!!! |
|
Сообщ.
#12
,
|
|
|
|
Цитата SetWindowPos(&CWnd::wndBottom, 0, 0, 0, 0, SWP_NOSIZE) малость не додумали: WM_WINDOWPOSCHANGING --> lParam --> WINDOWPOS.flags|SWP_NOSIZE |