Resizing Controls at Runtime
Introduction
Suppose you wanted to give the user the ability to modify the size and position on a certain control? This example shows how to implement resizing controls on a dialog box as it is done when drawing controls on a dialog template or using visual basic at design time.
In order to accomplish this we can use the class CRectTracker to manage all the drawing and resizing of a rectangular frame which also has (optional) 6 resize handlers ( as in the image above). First thing to do is to invoke a CRectTracker and specify given coordinates:
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);
There are two events that are needed to be taken care of:
SetCursor
if (pWnd == this && m_tracker->SetCursor(this, nHitTest))
return TRUE;
This is done in order to draw the correct mouse cursors when floating the mouse pointer over the rectangle.
OnLButtonDown
m_tracker->Track(this, point, TRUE);
Invalidate(FALSE);
CDC* pDC = GetDC();
m_tracker->Draw(pDC);
This will take care of the drawing of the rectangle with resizing it.
Once you finished all you have to do is draw the control with the new rectangle coordinates:
LPRECT rect = new RECT;
CWnd* wnd = (CWnd*)(GetDlgItem(IDC_EDIT1));
rect = LPRECT(m_tracker->m_rect);
wnd->MoveWindow(rect,TRUE) ;