![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Здравствуйте. У меня в окне есть edit control, мне нужно чтобы размер окна изменялся когда за рамку окна тянешь мышкой. Подскажите как это сделать?
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
чтобы менять размер окна за его рамку, нужно добавить ему стиль WS_THICKFRAME
чтобы менять размер любого дочернего окна, когда меняется размер родительского, нужно перехватывать сообщение WM_SIZE и для дочернего вызывать SetWindowPos или MoveWindow с новыми координатами ps: из текста сообщения не совсем понятно, какой из этих двух вопросов ты задал Добавлено через 1 минуту и 37 секунд может есть какой-то третий вопрос? Это сообщение отредактировал(а) GremlinProg - 25.6.2009, 22:41 -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
GremlinProg, мне нужен первый вариант, спасибо. Есть еще вопрос.
1) Как сделать так чтобы изменять размеры можно было только по горизонтали, т.е чтобы при попытке изменения размеров по вертикали пунктирная рамка, которая укажет новый размер окна не появлялась. 2) При задании стиля WS_THICKFRAME вокруг edita появляется рамка, можно ли ее сделать тоньше ? или вообще скрыть (так нужно). |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
WS_THICKFRAME - для эдита задавать не надо. Это для главного окна.
и появляться она больше не будет! Лови и обрабатывай сообщение WM_GETMINMAXINFO -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| yngwie19 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 829 Регистрация: 15.6.2008 Где: Новгород Репутация: нет Всего: нет |
Andrey44,сообщение WM_GETMINMAXINFO отправляется когда размеры изменены, как тогда написать что при захвате края окна и перемещении мыши, окно изменяется
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
WM_GETMINMAXINFO без WS_THICKFRAME вообще не придет, т.к. ограничивает максимальные и минимальные размеры, которые изменяются именно при таскании компонента за его границы, при этом, рамка все равно останется
на ширину рамки повлиять нельзя, ее рисует DefWindowProc без каких-либо внешних вмешательств а чтобы рамки не было вообще, делай то же, что делает WS_THICKFRAME но уже вручную, т.е. перехватывай WM_NCHITTEST, WM_(NC)LBUTTONDOWN, WM_MOUSEMOVE, WM_MOUSEUP, WM_CAPTURECHANGED, используя, конечно Set/ReleaseCapture и меняй координаты эдита уже с помощью SetWindowPos или MoveWindow (при этом, естественно WM_GETMINMAXINFO тут уже не поможет, ограничивай минимальные габариты сам) если достаточно только скрыть рамку с верху и снизу, то можно перехватить WM_NCHITTEST, и если курсор находится вблизи верхней и нижней границы окна - перекрывать CallWindowProc, т.е. сразу возвращаться из процедуры окна с результатом HTNOWHERE, минуя CallWindowProc, можно и не минуя CallWindowProc, т.е. вызвать ее и посмотреть, что она вернула, но вернуть HTNOWHERE, когда потребуется, (безусловный вызов CallWindowProc - тут не совсем чистый вариант, т.к. и DefWindowProc и процедура окна уровнем ее выше, могут вполне зафиксировать во внутренних состояниях окна, что необходимы изменения, т.е. можно нарушить правильную работу окна в какой-нибудь из последующих версий компонента) либо - еще один вариант: перехватывай WM_NCLBUTTONDOWN и смотри на HitTest-код (wParam), если он равен HTTOP, HTTOPLEFT, HTTOPRIGHT, HTBOTTOM, HTBOTTOMLEFT или HTBOTTOMRIGHT, то перекрывай CallWindowProc, т.е., таким образом DefWindowProc вообще не определит момент, когда нужно менять именно вертикальные габариты и, соответственно, менять ничего не будет, рамки тоже не будет, хотя курсоры up-down - будут (в пред. примере даже курсоров не будет) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
GremlinProg, я наверное не понял, ему за рамку какого окна тянуть надо? эдита или диалога?
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Andrey44, да, нужно за края эдита менять его горизонтальный размер
Добавлено через 7 минут и 25 секунд я немного подкорректировал описание темы, чтобы было понятно -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
GremlinProg, понял спасибо.
Читая твои посты, я все больше понимаю что очень мало еще знаю. -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 8 Всего: 26 |
GremlinProg, извини, я думал что пишу в соседнем топике Динамическое изменение размеров окна
А пользоваться поиском я умею -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
теперь так и есть, поправлено )
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |