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.
480 lines
16 KiB
C++
480 lines
16 KiB
C++
// XTPSkinObjectFrame.h: interface for the CXTPSkinObjectFrame 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
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
#if !defined(__XTPSKINOBJECTFRAME_H__)
|
|
#define __XTPSKINOBJECTFRAME_H__
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
#ifndef WM_NCMOUSELEAVE
|
|
#define WM_NCMOUSELEAVE 0x02A2
|
|
#endif
|
|
|
|
#ifndef WM_QUERYUISTATE
|
|
#define WM_UPDATEUISTATE 0x0128
|
|
#define WM_QUERYUISTATE 0x0129
|
|
|
|
#define UISF_HIDEACCEL 0x2
|
|
#define UISF_HIDEFOCUS 0x1
|
|
#endif
|
|
|
|
#define XTP_HTSCROLLUP 60
|
|
#define XTP_HTSCROLLDOWN 61
|
|
#define XTP_HTSCROLLUPPAGE 62
|
|
#define XTP_HTSCROLLDOWNPAGE 63
|
|
#define XTP_HTSCROLLTHUMB 64
|
|
|
|
#define XTP_TID_MOUSELEAVE 0xACB
|
|
#define XTP_TID_REFRESHFRAME 0xACD
|
|
|
|
|
|
struct XTP_SKINSCROLLBARPOSINFO
|
|
{
|
|
int posMin;
|
|
int posMax;
|
|
int page;
|
|
int pos;
|
|
|
|
int pxTop;
|
|
int pxBottom;
|
|
int pxLeft;
|
|
int pxRight;
|
|
int cpxThumb;
|
|
int pxUpArrow;
|
|
int pxDownArrow;
|
|
int pxStart;
|
|
int pxThumbBottom;
|
|
int pxThumbTop;
|
|
int cpx;
|
|
int pxMin;
|
|
|
|
RECT rc;
|
|
int ht;
|
|
BOOL fVert;
|
|
int nBar;
|
|
BOOL fVisible;
|
|
};
|
|
|
|
struct XTP_SKINSCROLLBARTRACKINFO
|
|
{
|
|
BOOL fHitOld;
|
|
BOOL fTrackVert;
|
|
RECT rcTrack;
|
|
UINT cmdSB;
|
|
UINT_PTR hTimerSB;
|
|
int dpxThumb;
|
|
int pxOld;
|
|
int posOld;
|
|
int posNew;
|
|
|
|
BOOL bTrackThumb;
|
|
|
|
HWND hWndSB;
|
|
HWND hWndSBNotify;
|
|
|
|
int nBar;
|
|
BOOL fNonClient;
|
|
|
|
XTP_SKINSCROLLBARPOSINFO* pSBInfo;
|
|
};
|
|
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPSkinObjectFrame is a CXTPSkinObject derived class.
|
|
// It is parent control for all implementations that have border or scroll bars
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPSkinObjectFrame : public CXTPSkinObject
|
|
{
|
|
DECLARE_DYNCREATE(CXTPSkinObjectFrame)
|
|
public:
|
|
//===========================================================================
|
|
// Summary:
|
|
// Caption button class
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CCaptionButton
|
|
{
|
|
public:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CCaptionButton object.
|
|
// Parameters:
|
|
// nCommand - Command id of button
|
|
// pFrame - Parent frame object
|
|
// nHTCode - Hit test code of the button
|
|
// m_nClassPart - Class part
|
|
//-----------------------------------------------------------------------
|
|
CCaptionButton(int nCommand, CXTPSkinObjectFrame* pFrame, UINT nHTCode, int m_nClassPart);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destructs a CCaptionButton object.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CCaptionButton();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called to draw caption button
|
|
// Parameters:
|
|
// pDC - Pointer to device context
|
|
// bFrameActive - TRUE if frame is active
|
|
//-----------------------------------------------------------------------
|
|
void Draw(CDC* pDC, BOOL bFrameActive);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Determines if button is pressed
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsPressed() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Determines if button is highlighted
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsHighlighted() const;
|
|
|
|
public:
|
|
UINT m_nHTCode; // HitTest code
|
|
CRect m_rcButton; // Button bounding rectangle
|
|
int m_nClassPart; // Class part
|
|
CXTPSkinObjectFrame* m_pFrame; // Parent frame object
|
|
int m_nCommand; // Button Command
|
|
BOOL m_bEnabled;
|
|
};
|
|
|
|
typedef CArray<CCaptionButton*, CCaptionButton*> CCaptionButtons;
|
|
|
|
public:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPSkinObjectFrame object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPSkinObjectFrame();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPSkinObjectFrame object, handles cleanup and deallocation.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPSkinObjectFrame();
|
|
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called to redraw scroll bar of the frame
|
|
// Parameters:
|
|
// nBar - Scroll bar
|
|
//-----------------------------------------------------------------------
|
|
void RedrawScrollBar(int nBar);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Retrieves borders of window
|
|
//-----------------------------------------------------------------------
|
|
CRect GetBorders() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Determines if caption currently active
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsActive() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Retrieves collection of caption buttons
|
|
//-----------------------------------------------------------------------
|
|
CCaptionButtons* GetCaptionButtons();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to get client brush
|
|
// Parameters:
|
|
// pDC - Device context
|
|
//-----------------------------------------------------------------------
|
|
virtual HBRUSH GetClientBrush(CDC* pDC);
|
|
|
|
public:
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
BOOL IsFrameScrollBars();
|
|
HBRUSH GetClientBrush(HDC hDC, HWND hWnd, UINT nCtlColor);
|
|
XTP_SKINSCROLLBARTRACKINFO* GetScrollBarTrackInfo() const;
|
|
|
|
BOOL DrawMenuBar();
|
|
virtual void UpdateMenuBar();
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called when skin was changed
|
|
// Parameters:
|
|
// bPrevState - TRUE if previously skin was installed
|
|
// bNewState - TRUE if skin is installed
|
|
//-----------------------------------------------------------------------
|
|
virtual void OnSkinChanged(BOOL bPrevState, BOOL bNewState);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called when visual metrics was changed
|
|
//-----------------------------------------------------------------------
|
|
virtual void RefreshMetrics();
|
|
|
|
// ---------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called when hook is attached
|
|
// Parameters:
|
|
// lpcs : Points to a CREATESTRUCT structure that contains
|
|
// information about the CWnd object being created.
|
|
// bAuto : Indicates that Window was automatically skinned when new
|
|
// window was create or when user skin manually existing
|
|
// window
|
|
//
|
|
// ---------------------------------------------------------------------
|
|
virtual void OnHookAttached(LPCREATESTRUCT lpcs, BOOL bAuto);
|
|
|
|
// ---------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called when hook is detached
|
|
// Parameters:
|
|
// bAuto : Indicates that Window was automatically skinned when new
|
|
// window was create or when user skin manually existing
|
|
// window
|
|
// ---------------------------------------------------------------------
|
|
void OnHookDetached(BOOL bAuto);
|
|
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
public:
|
|
void RedrawFrame();
|
|
|
|
protected:
|
|
void CreateHeaderRgn(CRgn& rgnHeader, int nWidth);
|
|
void UpdateFrameRegion(CSize szFrameRegion);
|
|
void UpdateButtons();
|
|
void InvalidateButtons();
|
|
CCaptionButton* HitTestButton(CPoint pt);
|
|
void UpdateButton(int nID, BOOL bVisible, BOOL bEnabled, UINT htCode, int nClassPart);
|
|
void RemoveButtons();
|
|
void RefreshFrameStyle();
|
|
BOOL HasCaption() const;
|
|
HBRUSH FillBackground(CDC* pDC, LPCRECT lprc, int nMessage = WM_CTLCOLORSTATIC);
|
|
HBRUSH GetFillBackgroundBrush(CDC* pDC, int nMessage);
|
|
void ResizeFrame();
|
|
virtual int GetClientBrushMessage();
|
|
|
|
protected:
|
|
virtual void DrawFrame(CDC* pDC);
|
|
void ScreenToFrame(LPPOINT lpPoint);
|
|
void ClientToFrame(LPPOINT lpPoint);
|
|
void AdjustFrame(CRect& rc);
|
|
BOOL OnHookMessage(UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
|
|
BOOL OnHookDefWindowProc(UINT nMessage, WPARAM& wParam, LPARAM& lParam, LRESULT& lResult);
|
|
|
|
protected:
|
|
void DrawScrollBar(CDC* pDC, XTP_SKINSCROLLBARPOSINFO* pSBInfo);
|
|
void TrackInit(CPoint point, XTP_SKINSCROLLBARPOSINFO* pSBInfo, BOOL bDirect);
|
|
void ContScroll();
|
|
void DoScroll(HWND hwnd, HWND hwndNotify, int cmd, int pos, BOOL fVert);
|
|
void TrackBox(UINT message, CPoint point);
|
|
void TrackThumb(UINT message, CPoint point);
|
|
void MoveThumb(int px);
|
|
int HitTestScrollBar(XTP_SKINSCROLLBARPOSINFO* pSBInfo, POINT pt);
|
|
void EndScroll(BOOL fCancel);
|
|
void CalcScrollBarInfo(LPRECT lprc, XTP_SKINSCROLLBARPOSINFO* pSBInfo, SCROLLINFO* pSI);
|
|
void RedrawScrollBar(XTP_SKINSCROLLBARPOSINFO* pSBInfo);
|
|
void SetupScrollInfo(XTP_SKINSCROLLBARPOSINFO* pSBInfo);
|
|
CRect GetScrollBarRect(int sbCode);
|
|
void TrackCaptionButton();
|
|
BOOL IsSizeBox();
|
|
virtual BOOL IsDefWindowProcAvail(int nMessage) const;
|
|
BOOL PreHookMessage(UINT nMessage);
|
|
BOOL IsFlatScrollBarInitialized() const;
|
|
HWND FindMDIClient();
|
|
virtual BOOL HandleSysCommand(UINT nID, LPARAM lParam);
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
protected:
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
//{{AFX_VIRTUAL(CXTPSkinObjectFrame)
|
|
//}}AFX_VIRTUAL
|
|
|
|
//{{AFX_MSG(CXTPSkinObjectFrame)
|
|
afx_msg void OnNcPaint();
|
|
afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
|
|
afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
|
|
afx_msg LRESULT OnNcHitTest(CPoint point);
|
|
afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
|
|
afx_msg void OnNcRButtonUp(UINT nHitTest, CPoint point);
|
|
afx_msg void OnNcLButtonDblClk(UINT nHitTest, CPoint point);
|
|
afx_msg void HandleTimer(UINT_PTR nIDEvent);
|
|
afx_msg void OnNcMouseLeave();
|
|
afx_msg LRESULT OnSetText(WPARAM wParam, LPARAM lParam);
|
|
afx_msg BOOL OnNcActivate(BOOL bActive);
|
|
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
|
afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
|
|
afx_msg LRESULT OnPrint(WPARAM, LPARAM);
|
|
afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);
|
|
afx_msg void OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct);
|
|
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
|
|
afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
afx_msg void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
virtual BOOL HandleMouseMove(CPoint point);
|
|
virtual LRESULT HandleNcHitTest(CPoint point);
|
|
afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
|
LRESULT CallDefDlgProc(UINT nMessage, WPARAM wParam, LPARAM lParam);
|
|
static void CALLBACK OnTimerInternal(HWND hWnd, UINT nMsg, UINT_PTR nIDEvent, DWORD dwTime);
|
|
afx_msg LRESULT OnSetIcon(WPARAM, LPARAM);
|
|
//}}AFX_MSG
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
protected:
|
|
void CancelMouseLeaveTracking();
|
|
HWND GetTopLevelWindow() const;
|
|
|
|
public:
|
|
BOOL m_bLockFrameDraw; // TRUE to lock draw
|
|
DWORD m_dwDialogTexture; // Dialog texture
|
|
CXTPSkinObjectFrame* m_pMDIClient;
|
|
protected:
|
|
CCaptionButtons m_arrButtons; // Caption buttons
|
|
CRect m_rcBorders; // Frame borders
|
|
CCaptionButton* m_pButtonHot; // Hot caption button
|
|
CCaptionButton* m_pButtonPressed; // Pressed caption button
|
|
BOOL m_bRegionChanged; // TRUE if region was changed
|
|
XTP_SKINSCROLLBARTRACKINFO* m_pSBTrack; // Track info of scroll bars
|
|
XTP_SKINSCROLLBARPOSINFO m_spi[2]; // Scroll bar position info
|
|
CSize m_szFrameRegion; // Lase frame region
|
|
BOOL m_bMDIClient; // TRUE if frame is MDI client
|
|
BOOL m_bActive; // TRUE if caption is active
|
|
DWORD m_dwStyle; // Styles of window
|
|
DWORD m_dwExStyle; // ExStyles of window
|
|
BOOL m_bInUpdateRegion;
|
|
int m_nCtlColorMessage;
|
|
static BOOL m_bMenuStatus;
|
|
|
|
private:
|
|
friend class CXTPSkinManager;
|
|
friend class CCaptionButton;
|
|
};
|
|
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPSkinObjectUser32Control is a CXTPSkinObjectFrame derived class.
|
|
// It is base class for all User32 defined controls
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPSkinObjectUser32Control : public CXTPSkinObjectFrame
|
|
{
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPSkinObjectUser32Control object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPSkinObjectUser32Control();
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method called to determine if scroll bar position was changed
|
|
//-----------------------------------------------------------------------
|
|
virtual void CheckScrollBarsDraw();
|
|
|
|
protected:
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
// Overrides
|
|
//{{AFX_VIRTUAL(CXTPSkinObjectUser32Control)
|
|
BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
|
|
//}}AFX_VIRTUAL
|
|
|
|
//{{AFX_MSG(CXTPSkinObjectUser32Control)
|
|
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
|
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
|
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
|
|
afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
|
|
//}}AFX_MSG
|
|
|
|
protected:
|
|
SCROLLINFO m_si[2];
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
};
|
|
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPSkinObjectComCtl32Control is a CXTPSkinObjectUser32Control derived class.
|
|
// It is base class for all ComCtl32 defined controls
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPSkinObjectComCtl32Control : public CXTPSkinObjectUser32Control
|
|
{
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPSkinObjectComCtl32Control object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPSkinObjectComCtl32Control();
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method called to determine if scroll bar position was changed
|
|
//-----------------------------------------------------------------------
|
|
virtual void CheckScrollBarsDraw();
|
|
};
|
|
|
|
AFX_INLINE BOOL CXTPSkinObjectFrame::IsActive() const {
|
|
return m_bActive;
|
|
}
|
|
|
|
AFX_INLINE CRect CXTPSkinObjectFrame::GetBorders() const {
|
|
return m_rcBorders;
|
|
}
|
|
|
|
AFX_INLINE XTP_SKINSCROLLBARTRACKINFO* CXTPSkinObjectFrame::GetScrollBarTrackInfo() const {
|
|
return m_pSBTrack;
|
|
}
|
|
|
|
AFX_INLINE CXTPSkinObjectFrame::CCaptionButtons* CXTPSkinObjectFrame::GetCaptionButtons() {
|
|
return &m_arrButtons;
|
|
}
|
|
AFX_INLINE void CXTPSkinObjectFrame::UpdateMenuBar() {
|
|
|
|
}
|
|
|
|
#endif // !defined(__XTPSKINOBJECTFRAME_H__)
|