Изменение размера
элемента управления во время выполнения
приложения.
Автор: Amit Nabarro.
Всего парой строк коды Вы
можете дать возможность конечному пользователю
изменять размеры разлиных элементов управления.
Предположим, Вы испытываете необходимость дать
возможность пользователю самостоятельно
изменять размер и положение определённого
элемента управления? Этот пример показывает, как
включить в диалоговое окно такой контрол, как это
сделано в редакторе форм Вашего компилятора. В
этом нам поможет класс CRectTracker, который будет
управлять прорисовкой и изменением размера
прямоугольного фрейма. Перво наперво Вам
потребуется вызвать CRectTracker и указать нужные
координаты:
LPRECT rect = new RECT;
CWnd* wnd = (CWnd*)(GetDlgItem(IDC_EDIT1));
wnd->GetWindowRect(rect) ;
ScreenToClient(rect) ;
m_tracker = new CRectTracker(rect, CRectTracker::dottedLine |
CRectTracker::resizeOutside |
CRectTracker::hatchedBorder);
m_tracker->Draw(pDC) ;
Нужно обработать всего два события:
- SetCursor
if (pWnd == this && m_tracker->SetCursor(this, nHitTest))
return TRUE;
Это сделано, чтобы прорисовывать правильный
курсор мышки, при движении указателя мышки по
прямоугольнику.
- LButtonDown
m_tracker->Track(this, point, TRUE);
Invalidate(FALSE);
CDC* pDC = GetDC();
m_tracker->Draw(pDC);
Этот обработчик будет заботится о получении
координат прорисовке прямоугольника во время
изменения его размеров.
В заключении цикла надо нарисовать элемент
управления с новыми координатами:
LPRECT rect = new RECT;
CWnd* wnd = (CWnd*)(GetDlgItem(IDC_EDIT1));
rect = LPRECT(m_tracker->m_rect);
wnd->MoveWindow(rect,TRUE) ;
Downloads
Скачать демонстрационный проект - 9
Kb
|