Автор
|
Тема: Надо сдвинуть кнопку на 10 пикселов влево (MSVC6)
|
HOMO_PROGRAMMATIS |
опубликован 12-11-2001 20:55 MSK
Здравствуйте! Люди, вроде всё просто, но я уже так намучился! (MSVC6) Всё что надо - передвинуть в своём диалог-окне кнопку с известным ID на Х пикселов влево. У меня какая-то лажа с экранными-клиентскими координатами, по моему. Плиз, напишите кусочек кода, очень прошу!
|
SUnteXx
|
опубликован 13-11-2001 00:44 MSK
В диалоге используются другая система координат, чем в окне!( Врать не буду какая система координат у них, но точно знаю что другая, не в пикселях!(Попробуйте сделать так: RECT R; HWND hWndButton = GetDlgItem(hDlg, IDC_BUTTON); GetWindowRect(hWndButton, &R); R.left += 10; R.right +=10; MoveWindow(hWndButton, R.left, R.top, R.right-R.left, R.bottom - R.top, TRUE); Вроде бы все! У меня все контролы в диалоге так двигаются! |
DmitryRyvkin
|
опубликован 13-11-2001 07:18 MSK
По-моему, надо иначе, а именно -RECT R; HWND hWndButton = GetDlgItem(hDlg, IDC_BUTTON1); GetWindowRect(hWndButton, &R); int width=R.right-R.left, height=R.bottom-R.top; POINT pnt={R.left+10,R.top}; ScreenToClient(hDlg,&pnt); MoveWindow(hWndButton, pnt.x, pnt.y, width, height, TRUE); ScreenToClient нужна т.к. ф-ция GetWindowRect дает координаты в коорд-ах экрана, а MoveWindow - требует клиентских координат (для child окон, кнопка думаю здесь child будет) Ну и POINT для нее же понадобился. Что же касается систем координат диалога - они совершенно такие же, как и для других окон.Просто Dialog Editor на статус баре показывает не пиксели а нечто иное, связанное с текущим шрифтом, но это другая тема.
|
SUnteXx
|
опубликован 13-11-2001 11:35 MSK
2DmitryRyvkin: Вы правы, я совсем забыл о ScreenToClient! Просто я в своей проге двигаю контролы изходя из RECT'a клиентской области! |