91 lines
2.0 KiB
C++
91 lines
2.0 KiB
C++
// WGroupDlg.cpp : 实现文件
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "CaptionButton.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<CRect> 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<CRect> &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);
|
|
} |