Expanding Dialog

This article was contributed by D.Sivakumar

This article is based on an article contributed by Peter Pearson . Since I found my own version of this solution to be quite useful, in implementing expanding dialogs, I thought I would share mine with others as well. What I've done is to consolodate the code into a single function and provide a couple of bug fixes. Hopefully, this version will be of use to other people.

The single function is called ExpandyaContaract. Please note that I also changed the order in which the EnableWindow function is called. As per the original code, the static field also gets disabled. The other changes are the setting of the m_bExpanded flag to FALSE so that dialog starts with contracted mode and the calling of the ExpandyaContaract function from OnInitDialog.

// CExpandDlgDlg dialog 

class CExpandDlgDlg : public CDialog { 
// Construction 
 CExpandDlgDlg(CWnd* pParent = NULL); // standard constructor 

// Dialog Data
 CButton m_Devide; 

 // ClassWizard generated virtual function overrides
 virtual void DoDataExchange(CDataExchange* pDX);
 int m_nNormalWidth; 
 int m_nExpandedWidth; 
 BOOL m_bExpanded; 

// Implementation 
 HICON m_hIcon; 
 void ExpandyaContract(); 
 // Generated message map functions 
 virtual BOOL OnInitDialog(); 
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 
 afx_msg void OnPaint(); 
 afx_msg HCURSOR OnQueryDragIcon(); 
 afx_msg void OnButtonAdvanced(); 

void CExpandDlgDlg::OnButtonAdvanced() 
 // TODO: Add your control notification handler code here 

void CExpandDlgDlg::ExpandyaContract() 
 CRect rcDlg, rcMarker; 


 if (!m_bExpanded) 
  m_nExpandedWidth = rcDlg.Width(); 
  m_nNormalWidth = (rcMarker.right - rcDlg.left); 

  rcDlg.SetRect(rcDlg.left, rcDlg.top, rcDlg.left + m_nNormalWidth+12, 
  rcDlg.top + rcDlg.Height()); 

  HWND hWndChild = ::GetDlgItem(m_hWnd, IDC_STATIC_DEVIDE); 

  while (hWndChild != NULL) 
   hWndChild = ::GetNextWindow(hWndChild, GW_HWNDNEXT); 
   ::EnableWindow(hWndChild, m_bExpanded); 
  rcDlg.SetRect( rcDlg.left, rcDlg.top, rcDlg.left + + m_nExpandedWidth, 
  rcDlg.top + rcDlg.Height() ); 

  HWND hWndChild = ::GetDlgItem(m_hWnd, IDC_STATIC_DEVIDE); 

  while (hWndChild != NULL) 
   hWndChild = ::GetNextWindow(hWndChild, GW_HWNDNEXT); 
   ::EnableWindow(hWndChild, m_bExpanded); 

 MoveWindow(rcDlg, TRUE); 
 m_bExpanded = !m_bExpanded; 


Download source code - 11 Kb


  • Expand DialogBox

    Posted by Legacy on 07/24/2001 12:00am

    Originally posted by: Ed Liu

    What is the most simple way to do is changing the dialogbox's size by MoveWindow().

    • test

      Posted by hari on 11/08/2012 09:25pm

      this is test

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Lenovo recommends Windows 8 Pro. "I dropped my laptop getting out of the taxi." This probably sounds familiar to most IT professionals. If your employees are traveling, you know their devices are in for a rough go. Whether it's a trip to the conference room or a convention out of town, any time equipment leaves a user's desk it is at risk of being put into harm's way. Stay connected at all times, whether at the office or on the go, with agile, durable, and flexible devices like the Lenovo® …

  • U.S. companies are desperately trying to recruit and hire skilled software engineers and developers, but there's simply not enough quality talent to go around. In response, companies often resort to inferior solutions -- hiring substandard developers and engineers, recruiting talent on a part-time or temporary basis, poaching people from competitors, or burdening an already stressed IT staff for more of their labor. Fortunately, there's a better solution. Read this white paper to learn the business value of …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date