Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: CWnd::SetWindowPos()  (Прочитано 9100 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tuborg
Команда клуба

ee
Offline Offline

« : 15-02-2007 16:55 » 

Доброе время суток!

Делаю масштабируемое диалоговое окно, меняю размеры всех элементов в зависимости от изменения размеров окна. (Событие WM_SIZE, обработчик OnSize в MFC), делаю так:

Код:
CWnd* graphFrame  = (CWnd*)GetDlgItem(IDC_GRAPH_FRAME);
CWnd* graphFrame2  = (CWnd*)GetDlgItem(IDC_GRAPH_FRAME2);

graphFrame->GetWindowRect(lpGF1Rect);
graphFrame->SetWindowPos(NULL,10,(lpGF1Rect.bottom)+10,cx-10,30,SWP_NOZORDER);
якобы в этом месте graphFrame должен сместить левый верхний угол и поменять свои размеры согласно параметрам вызова SetWindowPos.  Флаг тебе в руки!

но происходит следующее:  Быть такого не может
если скажем lpGF1Rect.bottom был равен 255, то проедыдущий SetWindowPos должен сделать lpGF2Rect.top равным 265, но вызов метода:
Код:
graphFrame->GetWindowRect(lpGF2Rect);
даёт немного неожиданный результат: lpGF2Rect.top==398  Не может быть...

Может я не понимаю смысла метода CWnd::SetWindowPos() ? Подскажите...
« Последнее редактирование: 15-02-2007 20:25 от Tuborg » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 16-02-2007 12:04 » 

ScreenToClient забыл после GetWindowRect для родительского окна graphFrame

graphFrame->GetParent->ScreenToClient(lpGF1Rect)

ps (lpGF1Rect.bottom) в скобки брать не надо
« Последнее редактирование: 16-02-2007 12:07 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Tuborg
Команда клуба

ee
Offline Offline

« Ответ #2 : 16-02-2007 12:28 » 

Джон, спасибо, то что надо. я вот только
graphFrame->GetParent->ScreenToClient(lpGF1Rect) заменил на
this->ScreenToClient(lpGF1Rect), поскольку из Parent'a и вызываю
« Последнее редактирование: 15-12-2007 17:16 от Алексей1153++ » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #3 : 16-02-2007 13:35 » 

А ну понятно - я же не знал откуда ты graphFrame вызываешь. В любом случае мой код был тоже правильный. Ага Конечно не оптимальный.

Самое главное - ты понял почему? В смысле "забыл ScreenToClient"? Или не знал про него и почему это надо делать?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Tuborg
Команда клуба

ee
Offline Offline

« Ответ #4 : 16-02-2007 15:08 » 

Я знал, что в WinApi GUI двухкоординатная система =), но не знал что SetWindowPos пользуется этой системой совсем в другом базисе =)
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 16-02-2007 15:42 » 

Ок, если не понятно - спрашивай.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines