/** * @file XTPFrameHook.h * * @copyright * (c) 1998-2025 Codejock Software, All Rights Reserved. * * This source file is the property of Codejock Software and must not be * redistributed by any means without the explicit written permission of * Codejock Software. * * The use of this source code is governed by the terms and conditions specified * in the Toolkit Pro license agreement. Codejock Software grants you, as a * single software developer, the limited right to use this software on one * computer only. * * Contact Information: * support@codejock.com * http://www.codejock.com * */ /** @cond */ #if !defined(__XTPCOMMANDBARSFRAMEHOOK_H__) # define __XTPCOMMANDBARSFRAMEHOOK_H__ /** @endcond */ # if _MSC_VER > 1000 # pragma once # endif // _MSC_VER > 1000 # include "Common/Base/Diagnostic/XTPDisableNoisyWarnings.h" class CXTPRibbonBar; class CXTPMenuTitleBar; class CXTPResourceTheme; class CXTPControls; class CXTPFramePaintManager; class CXTPNotifySink; class CXTPFrameShadow; class CXTPFramePaintManager; class CXTPRibbonOffice2007FrameTheme; class CXTPRibbonMarkupFrameTheme; class CXTPFrameThemeNativeWindows11; typedef DWORD XTP_NOTIFY_CODE; /** * @brief * CXTPCommandBarsFrameHook is a CXTPHookManagerHookAble derived class. * It is a helper for Office 2007 window skinning. */ class _XTP_EXT_CLASS CXTPCommandBarsFrameHook : public CXTPHookManagerHookAble , IXTPPaintManagerEvents , IXTPFrameShadowManagerEvents { class CControlCaptionButton; public: /** * @brief * Constructs a CXTPCommandBarsFrameHook object */ CXTPCommandBarsFrameHook(); /** * @brief * Destroys a CXTPCommandBarsFrameHook object, handles cleanup and deallocation */ ~CXTPCommandBarsFrameHook(); public: /** * @brief * Call this method to enable frame theming * * @param pCommandBars Parent CommandBars object */ void EnableFrameTheme(CXTPCommandBars* pCommandBars); /** * @brief * Call this method to enable frame theming * * @param pSite Window to theme * @param pPaintManager Paint manager used to theme window */ void EnableFrameTheme(CWnd* pSite, CXTPPaintManager* pPaintManager); /** * @brief * Call this method to enable frame theming * * @param pSite Window to theme * @param pCommandBars Parent CommandBars object */ void EnableFrameTheme(CWnd* pSite, CXTPCommandBars* pCommandBars); /** * @brief * Call this method to disable frame theming */ void DisableFrameTheme(); /** @cond */ _XTP_DEPRECATED_IN_FAVOR(EnableFrameTheme) void EnableOffice2007Frame(CXTPCommandBars* pCommandBars); _XTP_DEPRECATED_IN_FAVOR(EnableFrameTheme) void EnableOffice2007Frame(CWnd* pSite, CXTPPaintManager* pPaintManager); _XTP_DEPRECATED_IN_FAVOR(EnableFrameTheme) void EnableOffice2007Frame(CWnd* pSite, CXTPCommandBars* pCommandBars); _XTP_DEPRECATED_IN_FAVOR(DisableFrameTheme) void DisableOffice2007Frame(); /** @endcond */ public: /** * @return * Returns Skinned window */ CWnd* GetSite() const; /** * @return * Returns Paint Manager used to skin window */ CXTPPaintManager* GetPaintManager() const; /** * @brief Call this method to retrieve the paint manager of the frame. * * @return A pointer to a CXTPPaintManager object. */ CXTPFramePaintManager* GetFramePaintManager() const; /** * @brief * Determines if caption of skinned window is visible * @return True if visible, false if not */ BOOL IsCaptionVisible() const; /** * @brief * Determines if Skinned window is active * @return True if active, false if not */ BOOL IsFrameActive() const; /** * @brief * Recalculates borders and region of frame */ void RecalcFrameLayout(); /** * @brief * Recalculates borders and region of frame with small delay */ void DelayRecalcFrameLayout(); /** * @brief * Redraw ribbon bar if found * * @see RedrawFrame */ void RedrawRibbonBar(); /** * @brief * Redraw MenuTitleBar bar if found * @see * MenuTitleBar */ void RedrawMenuTitleBar(); /** * @brief * Redraws frame of skinned window * * @see RedrawRibbonBar */ void RedrawFrame(); /** * @brief * Determines if frame has skinned scrollbar to draw rounded rects. * * @param pnStatusHeight Height of status bar to return. * * @return TRUE if frame has skinned status bar. * * @see IsMDIMaximized */ BOOL IsFrameHasStatusBar(int* pnStatusHeight = NULL) const; /** * @brief * Determines if frame is maximized child window. * * @return TRUE if frame is maximized child window. */ BOOL IsMDIMaximized() const; /** * @brief * Returns collection of caption buttons. * * @return Collection of caption buttons. */ CXTPControls* GetCaptionButtons() const; /** * @brief * Calculates height of caption * * @return * Height of caption in pixels * * @see GetFrameBorder */ int GetCaptionHeight() const; /** * @brief * Calculates size of frame borders * * @return Size of frame borders in pixels * * @see GetCaptionHeight */ CRect CalcFrameBorder() const; /** * @brief * Determines if Vista AERO theme is enabled * * @return * TRUE if Vista AERO theme is enabled */ BOOL IsDwmEnabled() const; /** * @brief * Disables Vista AERO theme. */ void DisableDwm(); /** * @brief Returns style of site window * * @return Style of site window. */ DWORD GetSiteStyle() const; /** * @brief Returns extended style of site window * * @return Extended style of site window. */ DWORD GetSiteExStyle() const; /** * @brief * This method is called to draw the ribbon frame if EnableFrameTheme * was not called. * * @param pDC Pointer to a valid device context. */ void DrawRibbonFramePart(CDC* pDC); /** * @brief * Updates the invalidated portions of the DWM client area. */ void UpdateDwmClientArea(); /** * @brief * Enables the previously disabled frame shadow. * * @return * TRUE if a shadow has been successfully enabled, otherwise FALSE. * * @see DisableShadow, GetShadow */ BOOL EnableShadow(); /** * @brief * Disables frame shadow if enabled. * * @see EnableShadow, GetShadow */ void DisableShadow(); /** * @brief * Obtains frame shadow pointer. * * @return * A valid frame shadow pointer if frame shadow is supported and enabled, * otherwise the return value is NULL. * * @see EnableShadow, DisableShadow */ CXTPFrameShadow* GetShadow() const; protected: /** * @brief * This member function is called by WindowProc, or is called during message reflection. * * @param hWnd Window handle that the message belongs to. * @param nMessage Specifies the message to be sent. * @param wParam Specifies additional message-dependent information. * @param lParam Specifies additional message-dependent information. * @param lResult The return value of WindowProc. Depends on the message; may be NULL. * * @return * TRUE if message was processed. */ virtual int OnHookMessage(HWND hWnd, UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult); /** * @brief * Gets invoked for MDI children windows as a result to call to * CXTPMDIFrameWnd::UpdateMDIChildrenTheme. */ virtual void OnUpdateMDIChildrenTheme(); protected: /** @cond */ // IXTPPaintManagerEvents overrides virtual void OnPaintManagerDestroyed(CXTPPaintManager* pPaintManager); // IXTPFrameShadowManagerEvents overrides virtual void OnFrameShadowDisabled(CXTPFrameShadowManager* pManager, HWND hwndOwner, CXTPFrameShadow* pShadow); void TrackCaptionButton(CXTPControl* pSelected); void UpdateFrameRegion(); void UpdateFrameRegion(CSize szFrameRegion, BOOL bUpdate = FALSE); void RepositionCaptionButtons(); void AddCaptionButton(int nID, int nHit); void ScreenToFrame(LPPOINT lpPoint); CXTPControl* HitTestCaptionButton(CPoint point); void RefreshFrameStyle(); void SetWinHook(); BOOL GetAutoHideBar() const; void OnResourceImagesChanged(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam); virtual void OnBeforeUpdatePaintManager(); virtual void OnUpdatePaintManager(CXTPPaintManager* pPaintManager); /** @endcond */ public: static UINT m_nMsgQueryFrameHook; /**< Helper message to determine if Hook was attached.*/ BOOL m_bLockNCPaint; /**< TRUE to disable repaint of non-client area*/ static BOOL m_bAllowDwm; /** @cond */ _XTP_DEPRECATE("Value ignored. Use frame shadows in combination with sizeable frame instead.") static BOOL m_bAllowBorderMouseTracking; /** @endcond */ protected: HWND m_hwndSite; /**< Skinned window handle */ CXTPRibbonBar* m_pRibbonBar; /**< Child Ribbonbar object */ CXTPMenuTitleBar* m_pMenuTitleBar; /**< Child MenuTitleBar object */ CXTPCommandBars* m_pCommandBars; /**< Attached commandbars object */ CXTPPaintManager* m_pPaintManager; /**< PaintManager used to draw frame */ BOOL m_bUseGlobalPaintManager; /**< If TRUE, a global paint manager has to be used to draw frame*/ BOOL m_bActive; /**< TRUE if frame is active */ CSize m_szFrameRegion; /**< Previous size of window */ BOOL m_bDelayReclalcLayout; /**< TRUE to recalculate layout after small delay */ CXTPControls* m_pCaptionButtons; /**< Caption buttons */ CXTPControl* m_pSelected; /**< Selected caption button */ BOOL m_bButtonPressed; /**< Pressed caption button */ BOOL m_bThemeFrameEnabled; /**< TRUE if skinning is enabled */ BOOL m_bInUpdateFrame; /**< TRUE if UpdateFrame method is executed */ BOOL m_bDwmEnabled; /**< TRUE if Vista AERO theme is enabled */ BOOL m_bBeingDestructed; /**< TRUE if class instance is being destructed */ BOOL m_bToolBarComposition; mutable CXTPFrameShadow* m_pShadow; /**< Optional. Frame shadow pointer.*/ private: UINT m_nMsgUpdateSkinState; UINT m_nMsgQuerySkinState; CXTPNotifySink* m_pSink; static void CALLBACK WinEventProc(CXTPWinEventHook::HWINEVENTHOOK hWinEventHook, DWORD event, HWND hWnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime); void SetSiteWindow(HWND hWnd = NULL); private: class CWinEventHook; friend class CXTPMenuTitleBar; friend class CXTPRibbonBar; friend class CControlCaptionButton; friend class CXTPCommandBars; friend class CXTPFramePaintManager; friend class CXTPRibbonOffice2007FrameTheme; friend class CXTPRibbonMarkupFrameTheme; friend class CXTPFrameThemeNativeWindows11; }; // Obsolete name # define CXTPOffice2007FrameHook CXTPCommandBarsFrameHook AFX_INLINE CWnd* CXTPCommandBarsFrameHook::GetSite() const { return CWnd::FromHandle(m_hwndSite); } AFX_INLINE BOOL CXTPCommandBarsFrameHook::IsFrameActive() const { return m_bActive; } AFX_INLINE CXTPControls* CXTPCommandBarsFrameHook::GetCaptionButtons() const { return m_pCaptionButtons; } AFX_INLINE BOOL CXTPCommandBarsFrameHook::IsDwmEnabled() const { return m_bDwmEnabled; } AFX_INLINE void CXTPCommandBarsFrameHook::DisableDwm() { m_bDwmEnabled = FALSE; } AFX_INLINE void CXTPCommandBarsFrameHook::SetSiteWindow(HWND hWnd /*= NULL*/) { m_hwndSite = hWnd; } /** @cond */ # include "Common/Base/Diagnostic/XTPEnableNoisyWarnings.h" #endif // !defined(__XTPCOMMANDBARSFRAMEHOOK_H__) /** @endcond */