![]() |
|
|
![]()
|
|
| assasinnn |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.8.2009 Репутация: нет Всего: нет |
Вопрос таков: перегружаю функцию OnSize(). В своем диалоговом окне добиваюсь, чтобы кнопки при растягивании либо вверх, либо вправо сохраняли свои позиции относительно главного окна.
Получил такой код:
ResData это вектор, содержащий структуры вида
заполнение структуры происходит при вызове функции
Проблема в том, что почему то при тестировании программы кнопки вместо того, чтобы вести себя, как описано выше, сбиваются в одну кучу в левом краю программы. В чем моя ошибка? |
||||||
|
|||||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
Не проверял, но по моему должно работать -------------------- ????? ??, ??????? ?????. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Первый раз OnSize приходит ДО вызова OnInitDialog: возможно с нулевыми размерами и при неинициализированных ResData). Если есть уверенность в том, что здесь все в порядке (там у тебя флаг какой-то, возможно, он рулит), то есть отладчик: посмотри по шагам как считается, чего гадать.
-------------------- ... |
|||
|
||||
| assasinnn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.8.2009 Репутация: нет Всего: нет |
Как не жаль, но опять все в гармонь |
|||
|
||||
| assasinnn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.8.2009 Репутация: нет Всего: нет |
Просмотрел вариант Andrey44, он действительно проще и лучше. Только вопрос остался. прошел отладчиком, получается, что при вызове функции GetDlgItem(nID)->GetClientRect(); левый край и вершина устанавливаются абсолютно всегда в ноль, оттого все пляски. Почему так может быть? Это сообщение отредактировал(а) assasinnn - 26.8.2009, 08:55 |
|||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
-------------------- ![]() |
|||
|
||||
| assasinnn |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.8.2009 Репутация: нет Всего: нет |
в левом краю окна программы. От этого вопрос поменял свою суть?) Добавлено через 59 секунд
в OnInitDialog() |
||||
|
|||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 12 Всего: 26 |
Ты можешь посмотреть значения вектора ResData?
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| assasinnn |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.8.2009 Репутация: нет Всего: нет |
Andrey44, спасибо! Я настроил. В твоем варианте надо было только заменить GetClientRect() (забыл я совсем, что у нее свойство такое устанавливать top и left в 0) на GetWindowRect() и ScreenToClient() Это сообщение отредактировал(а) assasinnn - 26.8.2009, 10:09 |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
Я так понял, что вопрос решился. Но на последок покажу как я добился того, что у меня все контролы перемещаются/растягиваются при изменении размеров окна. У меня есть такой класс
Все контролы, которые должны двигаться, я объявляю объетом этого шаблона с параметром нужного класса. Инициализировав его методом SetMovableData в обработчике OnSize вызываю метод MoveControl с параметрами самого OnSize. Для плавности добавляю таймер. Немного математики при инициализации и больше никаких проблем. P.S. думаю в комментах всё описано. -------------------- ![]() |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
||||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
Можно
Примерно так. width_ и sizeTimerId - члены класса. -------------------- ![]() |
|||
|
||||
| voov |
|
|||
![]() Патамушта мы пилоты ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 29.11.2007 Репутация: 8 Всего: 8 |
ага, т.е. это устранит мерцание при активном растягивании
|
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
не совсем устранит, но заметно снизит. -------------------- ![]() |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |