Knowledge Base Nr: 00311 expanddlg.cpp - http://www.swe-kaiser.de

MFC: Expandable Dialog (dialog dynamisch in größe und verhalten ändern)

  
- in dialog 2 controls einfügen (invisible setzen) - position bestimmt später dialoggröße

- messagehandler einfügen z.b. button

void CUserDlg::OnExpand()
{
CRect rect;
GetWindowRect(&rect);
int nNewHeight = -1;

if (m_bExpanded)
{
m_bExpanded = false;

GetDlgItem(IDC_EXPAND)->SetWindowText(theApp.Translate(L"Erweitert >>"));

CRect rectSmall;
GetDlgItem(IDC_SMALL)->GetWindowRect(&rectSmall);
nNewHeight = rectSmall.top - rect.top;
}
else
{
m_bExpanded = true;

GetDlgItem(IDC_EXPAND)->SetWindowText(theApp.Translate(L"Erweitert <<"));

CRect rectBig;
GetDlgItem(IDC_BIG)->GetWindowRect(&rectBig);
nNewHeight = rectBig.top- rect.top;
}

SetWindowPos(NULL, 0, 0, rect.Width(), nNewHeight, SWP_NOMOVE|SWP_NOZORDER);

//enable controls if visible
CWnd* pWnd = GetWindow(GW_CHILD);
while (pWnd != NULL)
{
CRect rectCtrl;
pWnd->GetWindowRect(&rectCtrl);
pWnd->EnableWindow(rectCtrl.top <= rect.top + nNewHeight);

pWnd = pWnd->GetWindow(GW_HWNDNEXT);
}

//set focus to first control
GetDlgItem(IDC_USER)->EnableWindow(m_bUserChangeable);
GetDlgItem(IDC_USER)->SetFocus();
}