Re[2]: Как динамически изменять положение CStatic в диалоге
От: sSerge  
Дата: 08.05.03 10:50
Оценка:
Здравствуйте, Serguei666, Вы писали:

S> Что вы тогда будете делать? Есть свой котелок?

Нет. Не буду.

>>1) Пара "GetDlgItem (IDC_MY_ITEM)" + "SetWindowPos()" не работает.

>А если я докажу, что работает?
Попробуй.
Благодаря наводке template-а испытания "::MoveWindow" прошли успешно.
Спасибо за его лаконичный и точный ответ. Он сэкономил мне массу времени.
Внимательное изучение MSDN на предмет различий между ф-ми
SetWindowPos и MoveWindow привело к тому, что оказывается
MoveWindow двигает все подряд, а SetWindowPos — избирательно.
(Цитировать MSDN не буду, там всего по 3 строки на каждую ф-цию).

S>2) Изменять шаблон диалога перед запуском — не удается позиционировать объект с точностью до пикселя.

S>Утверждение непонятно.
Попробую объяснить. (Хотя желания мало).
При позиционировании объектов при помощи шаблона диалога (DLGTEMPLATEEX)
координаты указываются в "логических единицах". Перевод их в физические
(пиксели) производится непосредственно при создании диалога. Это дает
возможность масштабировать элементы диалога (как и сам диалог) в зависимости
от конкретных настроек. Более точно — смотри GetDeviceCaps. Практика показывает,
что коэффициент преобразования — не целый. Поэтому поместить объект в
точку (0,0) — все получится как надо, а вот в точку (1,1) — уже далеко не всегда.
(Я бы сказал — никогда). Посмотреть на этот балет можно сделав снапшот диалога,
и сравнив логические координаты объектов и реальные отступы (в пикселях).

P.S.
Вопрос решен ::MoveWindow работает как надо.
С уважением, Сергей.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.