// WGroupDlg.cpp : 实现文件 // #include "stdafx.h" #include "TchBaseDlg.h" #include "CaptionButton.h" #include "WGroupCtrl.h" #include "WGroupDlg.h" #include "resource.h" // WGroupDlg 对话框 IMPLEMENT_DYNAMIC(WGroupDlg, CModelessDialog) BOOL g_bLockAutoSize=FALSE; WGroupDlg::WGroupDlg(UINT idResource,CWnd* pParent /*=NULL*/) : CModelessDialog(idResource, pParent), m_pCapBtn1(NULL),m_pCapBtn2(NULL),m_bNeedCapBtn(FALSE) { } WGroupDlg::~WGroupDlg() { } BEGIN_MESSAGE_MAP(WGroupDlg, CModelessDialog) ON_MESSAGE(WG_MES_CHILDSIZE,OnChildSize) ON_WM_DESTROY() END_MESSAGE_MAP() BOOL WGroupDlg::OnInitDialog() { BOOL bRet=CModelessDialog::OnInitDialog(); if(m_bNeedCapBtn) { // AddCapBtn(m_pCapBtn1=new CCaptionButton(_T("展开全部组"),IDB_FOLD, IDB_FOLD, FALSE)); // AddCapBtn(m_pCapBtn2=new CCaptionButton(_T("折叠全部组"),IDB_UNFOLD, IDB_UNFOLD, FALSE)); } AutoSize(); return bRet; } void WGroupDlg::OnDestroy() { if(m_pCapBtn1!=NULL) delete m_pCapBtn1; if(m_pCapBtn2!=NULL) delete m_pCapBtn2; CModelessDialog::OnDestroy(); } LRESULT WGroupDlg::OnChildSize(WPARAM, LPARAM) { if(!g_bLockAutoSize) AutoSize(); return 0; } void WGroupDlg::AutoSize() { CWnd*pWnd=GetWindow(GW_CHILD); if(pWnd==NULL) return; DualList lstRect; CRect rect; pWnd->GetWindowRect(rect); lstRect.AddTail(rect); CWnd *pFirst=pWnd; for(pWnd=pFirst->GetNextWindow();pWnd!=NULL&&pWnd!=pFirst;pWnd=pWnd->GetNextWindow()) { if((pWnd->GetStyle()&WS_VISIBLE)==0)//不可见窗口 continue; pWnd->GetWindowRect(rect); lstRect.AddTail(rect); } extern CRect GetTotalRect(DualList &lstRect); rect=GetTotalRect(lstRect); CRect rectOld; GetWindowRect(rectOld); if((GetStyle()&WS_CHILD)!=0&&GetParent()!=NULL) { GetParent()->ScreenToClient(rect); GetParent()->ScreenToClient(rectOld); } if(m_bModeless) rectOld.bottom=rect.bottom+WG_GROUP_DIALGOG_YSPACE; else rectOld.bottom=rect.bottom+WG_GROUP_DIALGOG_XSPACE; rectOld.right=rect.right+WG_GROUP_DIALGOG_XSPACE; MoveWindow(rectOld); }