// 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); } } }