You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
207 lines
4.9 KiB
C++
207 lines
4.9 KiB
C++
// XTPSkinObjectMDI.cpp: implementation of the CXTPSkinObjectMDI class.
|
|
//
|
|
// This file is a part of the XTREME SKINFRAMEWORK MFC class library.
|
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "Common/XTPDrawHelpers.h"
|
|
|
|
#include "XTPSkinObject.h"
|
|
#include "XTPSkinObjectFrame.h"
|
|
#include "XTPSkinObjectMDI.h"
|
|
#include "XTPSkinManager.h"
|
|
|
|
|
|
#define MM_CALCSCROLL 0x003F
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
IMPLEMENT_DYNCREATE(CXTPSkinObjectMDIClient, CXTPSkinObjectFrame)
|
|
|
|
CXTPSkinObjectMDIClient::CXTPSkinObjectMDIClient()
|
|
{
|
|
m_bMDIClient = TRUE;
|
|
m_bArrange = FALSE;
|
|
|
|
m_pMDIParent = NULL;
|
|
|
|
m_bSetWindowProc = TRUE;
|
|
}
|
|
|
|
CXTPSkinObjectMDIClient::~CXTPSkinObjectMDIClient()
|
|
{
|
|
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CXTPSkinObjectMDIClient, CXTPSkinObjectFrame)
|
|
//{{AFX_MSG_MAP(CXTPSkinObjectButton)
|
|
ON_WM_VSCROLL()
|
|
ON_WM_HSCROLL()
|
|
ON_MESSAGE(MM_CALCSCROLL, OnCalcScroll)
|
|
ON_WM_NCACTIVATE()
|
|
ON_WM_SIZE()
|
|
ON_MESSAGE_VOID(WM_MDIICONARRANGE, OnMDIArrange)
|
|
ON_MESSAGE_VOID(WM_MDICASCADE, OnMDIArrange)
|
|
ON_MESSAGE_VOID(WM_MDITILE, OnMDIArrange)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
void CXTPSkinObjectMDIClient::OnHookAttached(LPCREATESTRUCT lpcs, BOOL bAuto)
|
|
{
|
|
CXTPSkinObjectFrame* pParent = (CXTPSkinObjectFrame*)GetSkinManager()->Lookup(lpcs->hwndParent);
|
|
if (pParent)
|
|
{
|
|
m_pMDIParent = pParent;
|
|
m_pMDIParent->m_pMDIClient = this;
|
|
m_pMDIParent->InternalAddRef();
|
|
}
|
|
|
|
CXTPSkinObjectFrame::OnHookAttached(lpcs, bAuto);
|
|
}
|
|
|
|
void CXTPSkinObjectMDIClient::OnHookDetached(BOOL bAuto)
|
|
{
|
|
if (m_pMDIParent)
|
|
{
|
|
m_pMDIParent->m_pMDIClient = NULL;
|
|
|
|
m_pMDIParent->InternalRelease();
|
|
m_pMDIParent = NULL;
|
|
}
|
|
|
|
CXTPSkinObjectFrame::OnHookDetached(bAuto);
|
|
}
|
|
|
|
BOOL CXTPSkinObjectMDIClient::IsDefWindowProcAvail(int nMessage) const
|
|
{
|
|
return (UINT)nMessage == m_nMsgQuerySkinState;
|
|
}
|
|
|
|
void CXTPSkinObjectMDIClient::OnHScroll(UINT /*nSBCode*/, UINT /*nPos*/, CScrollBar* /*pScrollBar*/)
|
|
{
|
|
Default();
|
|
RedrawScrollBar(SB_HORZ);
|
|
}
|
|
|
|
void CXTPSkinObjectMDIClient::OnVScroll(UINT /*nSBCode*/, UINT /*nPos*/, CScrollBar* /*pScrollBar*/)
|
|
{
|
|
Default();
|
|
RedrawScrollBar(SB_VERT);
|
|
}
|
|
|
|
LRESULT CXTPSkinObjectMDIClient::OnCalcScroll(WPARAM, LPARAM)
|
|
{
|
|
|
|
LRESULT lResult = Default();
|
|
RedrawScrollBar(SB_VERT);
|
|
RedrawScrollBar(SB_HORZ);
|
|
|
|
return lResult;
|
|
}
|
|
|
|
BOOL CXTPSkinObjectMDIClient::OnNcActivate(BOOL bActive)
|
|
{
|
|
BOOL bResult = CXTPSkinObjectFrame::OnNcActivate(bActive);
|
|
RedrawScrollBar(SB_VERT);
|
|
RedrawScrollBar(SB_HORZ);
|
|
return bResult;
|
|
}
|
|
|
|
void CXTPSkinObjectMDIClient::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
if (((m_pManager->GetApplyOptions() & (xtpSkinApplyMetrics | xtpSkinApplyFrame)) == (xtpSkinApplyMetrics | xtpSkinApplyFrame)))
|
|
{
|
|
HWND hwndActive = (HWND)SendMessage(WM_MDIGETACTIVE);
|
|
if (hwndActive && ::GetWindowLongPtr(hwndActive, GWL_STYLE) & WS_MAXIMIZE)
|
|
{
|
|
CXTPSkinObjectFrame* pFrame = (CXTPSkinObjectFrame*)m_pManager->Lookup(hwndActive);
|
|
|
|
if (pFrame && pFrame->IsSkinEnabled())
|
|
{
|
|
CRect rcBorders = pFrame->GetBorders();
|
|
RECT rc;
|
|
rc.left = -rcBorders.left;
|
|
rc.top = -rcBorders.top;
|
|
rc.right = cx + rcBorders.right;
|
|
rc.bottom = cy + rcBorders.bottom;
|
|
|
|
::MoveWindow(hwndActive, rc.left, rc.top,
|
|
rc.right - rc.left, rc.bottom - rc.top, TRUE);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
CXTPSkinObjectFrame::OnSize(nType, cx, cy);
|
|
}
|
|
|
|
void CXTPSkinObjectMDIClient::OnMDIArrange()
|
|
{
|
|
if (m_bArrange)
|
|
{
|
|
Default();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
m_bArrange = TRUE;
|
|
|
|
HWND hWnd = ::GetWindow(m_hWnd, GW_CHILD);
|
|
while (hWnd)
|
|
{
|
|
CXTPSkinObjectFrame* pFrame = (CXTPSkinObjectFrame*)m_pManager->Lookup(hWnd);
|
|
if (pFrame)
|
|
{
|
|
RECT rc = CXTPWindowRect(hWnd);
|
|
pFrame->m_bLockFrameDraw += 1;
|
|
pFrame->SendMessage(WM_NCCALCSIZE, FALSE, (LPARAM)&rc);
|
|
pFrame->m_bLockFrameDraw -= 1;
|
|
|
|
pFrame->SetTimer(XTP_TID_REFRESHFRAME, 1000, &CXTPSkinObjectFrame::OnTimerInternal);
|
|
}
|
|
|
|
hWnd = ::GetWindow(hWnd, GW_HWNDNEXT);
|
|
}
|
|
|
|
Default();
|
|
|
|
m_bArrange = FALSE;
|
|
|
|
hWnd = ::GetWindow(m_hWnd, GW_CHILD);
|
|
while (hWnd)
|
|
{
|
|
CXTPSkinObjectFrame* pFrame = (CXTPSkinObjectFrame*)m_pManager->Lookup(hWnd);
|
|
if (pFrame)
|
|
{
|
|
pFrame->RedrawFrame();
|
|
}
|
|
|
|
hWnd = ::GetWindow(hWnd, GW_HWNDNEXT);
|
|
}
|
|
}
|
|
}
|