Тема: GetWindowRect
Показать сообщение отдельно
Старый 12.07.2011, 23:30   #1
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
GetWindowRect

Забодал этот косяк: как окна центровать - так пиши костыли.
Вот что написано во всех мануалах:
Функция GetWindowRect отыскивает размеры рамки ограничивающей прямоугольник определяемого окна. Размеры даны в экранных координатах, которые расположены относительно левого верхнего угла экрана.
Безусловно - поля bottom и right содержат в себе координаты y и x правой нижней точки окна. Проблема в том, что left и top содержат нули.
Ну т.е. для окна с левым верхним углом в 100;50 и размерами 100;100,
результат будет
left=0
top=0
bottom=150
right=200
Ну блин!
Т.е. функция ведёт себя аналогично GetClientRect (которая возвращает координаты в системе отсчёта рабочей области).
Оценить левый угол, исходя из разности GetClientRect и GetWindowRect нельзя, т.к. в уравнении участвуют ещё неизвестные параметры, характеризующие толщину границы окна, шапку (её может и не быть), системное меню, статус бар и прочее.
При этом в кодах разных прогеров часто встречается код, подразумевающий именно такой результат работы, как описан в учебнике.
Запускаю отладку - нули.
ЧЯДНТ?

mfc: http://www.firststeps.ru/mfc/winapi/r.php?72
!mfc: http://vsokovikov.narod.ru/New_MSDN_...windowrect.htm
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием