Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Михал Гость
|
Добавлено: Пт Ноя 07 2003 23:07 Заголовок сообщения: Visual C (DevStudio) |
|
|
Здравствуйте. Для масштабирования диалогового окна и пропорционального размещения управляющих элементов в нем (кнопок и т.п.) мне нужно узнать координаты управляющего элемента по его ID. Каким образом это можно сделать? Спасибо. |
|
Вернуться к началу |
|
|
Алексей Гость
|
Добавлено: Вт Ноя 11 2003 20:55 Заголовок сообщения: Re: Visual C (DevStudio) |
|
|
Подумаем:
Нам нужны размеры окна. В АПИ есть функции получения размера окна? Ищем в MSDN: GetWindow* ->GetWindowRect() Так, теперь нам нужно само окно... Оно у нас в диалоге... В диалоге есть функции перебора элементов? Есть. GetDlgItem(). Пишем код:
///////////////////////////////// CWnd* pWnd = GetDlgItem(ID);
if( pWnd ) { CRect rc; pWnd->GetWindowRect(rc);
// Считаем новые координаты
// Перемещаем окно pWnd->SetWindowPos(0, rc.left, rc.top, rc.Width(), rc.Height(), SWP_NOACTIVATE | SWP_NOZORDER); } /////////////////////////////////
Отла живаем, тестируем. |
|
Вернуться к началу |
|
|
Михал Гость
|
Добавлено: Чт Ноя 13 2003 21:33 Заголовок сообщения: Re: Visual C (DevStudio) |
|
|
Здравствуй, Алексей. Я сделал перерисовку немного иначе и все работает : в OnPaint: (для кнопки) CButton* bt=NULL; GetClientRect(rect); bt=(CButton*)GetDlgItem(IDC_ BUTTON); if (bt) bt->MoveWindow(210,rect.Height()-30, 60, 20,true); Любопытно, однако, что в OnSize работает очень странно, а именно: сперва отображается то, что я нарисовал в ресурсах (и это понятно т.к. вызывается WM_PAINT (а там начальный рисунок), однако при изменении размера кнопка перемещается непропорционально изменениям координат. Это раз, а во-вторых если включить возможность Maximize для диалога (в ресурсах), то перерисовка происходит не все клиентской области(я понимаю, что он и не должен все перерисовывать). Интересно в чем дело? |
|
Вернуться к началу |
|
|
|