Expanding Dialog | CodeGuru

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

Written By
CodeGuru Staff
CodeGuru Staff
Mar 6, 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

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
public:
 CExpandDlgDlg(CWnd* pParent = NULL); // standard constructor

// Dialog Data
 //{{AFX_DATA(CExpandDlgDlg)
 enum { IDD = IDD_EXPANDDLG_DIALOG };
 CButton m_Devide;
 //}}AFX_DATA

 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CExpandDlgDlg)
protected:
 virtual void DoDataExchange(CDataExchange* pDX);
 //}}AFX_VIRTUAL
 int m_nNormalWidth;
 int m_nExpandedWidth;
 BOOL m_bExpanded;

// Implementation
protected:
 HICON m_hIcon;
 void ExpandyaContract();
 // Generated message map functions
 //{{AFX_MSG(CExpandDlgDlg)
 virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 afx_msg void OnButtonAdvanced();
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};


void CExpandDlgDlg::OnButtonAdvanced()
{
 // TODO: Add your control notification handler code here
 ExpandyaContract();
}

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

 GetWindowRect(rcDlg);

 if (!m_bExpanded)
 {
  m_nExpandedWidth = rcDlg.Width();
  m_Devide.GetWindowRect(rcMarker);
  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);
  }
 }
 else
 {
  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;
}

Downloads

Download source code – 11 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.