With a couple of lines of code, you can give your end-users the ability to resize any control.
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 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 shown in the image above).
The first thing, you’ll need 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 only two events that are needed to be handled:
- 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.
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) ;