Resizing Controls at Runtime | CodeGuru

Resizing Controls at Runtime

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 […]

Written By
CodeGuru Staff
CodeGuru Staff
Oct 24, 2000
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More



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.

  • LButtonDown
  • 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) ;
    

Downloads

Download demo project – 9 Kb

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.