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.
913 lines
38 KiB
C++
913 lines
38 KiB
C++
// XTPTabBase.h : header file
|
|
//
|
|
// This file is a part of the XTREME CONTROLS 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
|
|
#ifndef __XTTABCTRLBASE_H__
|
|
#define __XTTABCTRLBASE_H__
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
#if _MSC_VER >= 1000
|
|
#pragma once
|
|
#endif // _MSC_VER >= 1000
|
|
|
|
class CXTPTabCtrlButtons;
|
|
class CXTPTabBaseTheme;
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Summary:
|
|
// Enumeration used to determine navigation button display for a
|
|
// CXTPTabCtrl object.
|
|
// Remarks:
|
|
// XTPNavBtnState type defines the constants used by the
|
|
// CXTPTabCtrl class to determine which navigation buttons to display.
|
|
// See Also:
|
|
// CXTPTabCtrl
|
|
//
|
|
// <KEYWORDS xtpNavBtnArrows, xtpNavBtnClose, xtpNavBtnShowAll>
|
|
// ----------------------------------------------------------------------
|
|
enum XTPNavBtnState
|
|
{
|
|
xtpNavBtnArrows = 1, // Display arrow buttons.
|
|
xtpNavBtnClose = 2, // Display close button.
|
|
xtpNavBtnShowAll = 3 // Display arrow and close buttons.
|
|
};
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPTabBase is a stand alone base class. It is used to draw an XP
|
|
// style tab control.
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPTabBase
|
|
{
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPTabBase object
|
|
//-----------------------------------------------------------------------
|
|
CXTPTabBase();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPTabBase object, handles cleanup and deallocation
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPTabBase();
|
|
|
|
public:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Retrieves a pointer to the associated tab control.
|
|
// Remarks:
|
|
// This member function is called by the base class to manage a
|
|
// pointer for the derived class CTabCtrl object.
|
|
// Returns:
|
|
// A pointer to a CTabCtrl object if successful, otherwise NULL.
|
|
//-----------------------------------------------------------------------
|
|
CTabCtrl* GetTabCtrlImpl();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Retrieves a pointer to the tab control navigation button object.
|
|
// Remarks:
|
|
// This member function is called to retrieve a to the tab control
|
|
// buttons used for navigating and closing tab windows.
|
|
// Returns:
|
|
// A pointer to a CXTPTabCtrlButtons object if successful, otherwise NULL.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTabCtrlButtons* GetButtons();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function copies the child coordinates of the CTabCtrl client
|
|
// area into the object referenced by 'rcChild'. The client coordinates
|
|
// specify the upper-left and lower-right corners of the client area.
|
|
// Parameters:
|
|
// rcChild - A reference to a CRect object to receive the client coordinates.
|
|
//-----------------------------------------------------------------------
|
|
virtual void GetChildRect(CRect& rcChild) const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to set visibility of the navigation buttons. These
|
|
// buttons are used in place of the default forward and back buttons that are
|
|
// displayed when the tab control is not wide enough to display all tabs. You can
|
|
// also define a close button to be used to close the active tab. This will give
|
|
// the tab control a VS.NET style tabbed interface.
|
|
// Parameters:
|
|
// dwFlags - The value can be one or more of the values listed in the Remarks section.
|
|
// Remarks:
|
|
// Styles to be added or removed can be combined by using the bitwise
|
|
// OR (|) operator. It can be one or more of the following:
|
|
// * <b>xtpNavBtnArrows</b> To show arrow buttons.
|
|
// * <b>xtpNavBtnClose</b> To show close button.
|
|
// * <b>xtpNavBtnShowAll</b> To show arrow and close buttons.
|
|
//-----------------------------------------------------------------------
|
|
void ShowNavButtons(DWORD dwFlags);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member to switch the visual theme of the control.
|
|
// Parameters:
|
|
// eTheme - New visual theme. Can be any of the values listed in the Remarks section.
|
|
// Remarks:
|
|
// eTheme can be one of the following:
|
|
// * <b>xtpControlThemeDefault</b> Use default theme.
|
|
// * <b>xtpControlThemeOfficeXP</b> Use Office XP theme.
|
|
// * <b>xtpControlThemeOffice2003</b> Use Office 2003 theme.
|
|
//-----------------------------------------------------------------------
|
|
BOOL SetTheme(XTPControlTheme eTheme);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to get a pointer to the currently selected theme.
|
|
// Returns:
|
|
// A pointer to a CXTPTabBaseTheme object representing the currently selected theme.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTabBaseTheme* GetTheme();
|
|
|
|
protected:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to refresh theme colors and redraw the control.
|
|
//-----------------------------------------------------------------------
|
|
virtual void RefreshMetrics();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called by the CXTPTabBase class to
|
|
// perform initialization when the window is created or sub-classed.
|
|
// Returns:
|
|
// TRUE if the window was successfully initialized, otherwise FALSE.
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL Init();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to associate the tab control with this object.
|
|
// Parameters:
|
|
// pTabCtrl - Points to a valid tab control object.
|
|
//-----------------------------------------------------------------------
|
|
void ImplAttach(CTabCtrl* pTabCtrl);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called by the tab control to add padding to a
|
|
// tab label for use with XP style tabs.
|
|
// Parameters:
|
|
// strLabelText - Tab label to add padding to.
|
|
//-----------------------------------------------------------------------
|
|
virtual void OnAddPadding(CString& strLabelText);
|
|
|
|
public:
|
|
bool m_bBoldFont; // true to set the selected tab font to bold.
|
|
bool m_bXPBorder; // true to draw an XP border around the tab child window.
|
|
BOOL m_bAutoCondensing; // TRUE for auto-condensing tabs.
|
|
|
|
protected:
|
|
CTabCtrl* m_pTabCtrl; // Pointer to the tab control associated with this object.
|
|
CXTPTabCtrlButtons* m_pNavBtns; // Arrow buttons.
|
|
CXTPTabBaseTheme* m_pTheme; // Pointer to the current theme object.
|
|
BOOL m_bSubclassed; // TRUE if the window was sub-classed.
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
virtual void PreSubclassWindow();
|
|
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
afx_msg void OnPaint();
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
|
afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
|
|
afx_msg void OnSysColorChange();
|
|
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
|
afx_msg LRESULT OnSetTheme(WPARAM wParam, LPARAM lParam);
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
};
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
AFX_INLINE CTabCtrl* CXTPTabBase::GetTabCtrlImpl() {
|
|
return m_pTabCtrl;
|
|
}
|
|
AFX_INLINE CXTPTabCtrlButtons* CXTPTabBase::GetButtons() {
|
|
return m_pNavBtns;
|
|
}
|
|
AFX_INLINE CXTPTabBaseTheme* CXTPTabBase::GetTheme() {
|
|
return m_pTheme;
|
|
}
|
|
|
|
//===========================================================================
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
#define DECLATE_TABCTRL_BASE(ClassName, Tab, Base)\
|
|
class _XTP_EXT_CLASS ClassName : public Tab, public Base\
|
|
{\
|
|
protected:\
|
|
virtual void PreSubclassWindow() {\
|
|
Tab::PreSubclassWindow();\
|
|
Base::PreSubclassWindow();\
|
|
} \
|
|
virtual BOOL PreCreateWindow(CREATESTRUCT& cs) {\
|
|
if (!Tab::PreCreateWindow(cs))\
|
|
return FALSE;\
|
|
return Base::PreCreateWindow(cs);\
|
|
} \
|
|
afx_msg void OnPaint() {\
|
|
Base::OnPaint();\
|
|
} \
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC) {\
|
|
return Base::OnEraseBkgnd(pDC);\
|
|
} \
|
|
afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection) {\
|
|
Base::OnSettingChange(uFlags, lpszSection);\
|
|
} \
|
|
afx_msg void OnSysColorChange() {\
|
|
Base::OnSysColorChange();\
|
|
} \
|
|
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct) {\
|
|
if (Tab::OnCreate(lpCreateStruct) == -1)\
|
|
return -1;\
|
|
return Base::OnCreate(lpCreateStruct);\
|
|
} \
|
|
afx_msg LRESULT OnSetTheme(WPARAM wParam, LPARAM lParam) {\
|
|
return Base::OnSetTheme(wParam, lParam);\
|
|
} \
|
|
};
|
|
|
|
#define ON_TABCTRL_REFLECT \
|
|
ON_MESSAGE(WM_XTP_SETCONTROLTHEME, OnSetTheme) \
|
|
ON_WM_PAINT() \
|
|
ON_WM_ERASEBKGND() \
|
|
ON_WM_SETTINGCHANGE() \
|
|
ON_WM_SYSCOLORCHANGE() \
|
|
ON_WM_CREATE
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPTabExBase is a stand alone base class. It is used to draw an XP
|
|
// style tab control.
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPTabExBase : public CXTPTabBase
|
|
{
|
|
private:
|
|
struct ITEMANDWIDTH;
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPTabExBase object
|
|
//-----------------------------------------------------------------------
|
|
CXTPTabExBase();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPTabExBase object, handles cleanup and deallocation
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPTabExBase();
|
|
|
|
public:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to enable or disable the control from
|
|
// being redrawn or updated.
|
|
// Parameters:
|
|
// bRedraw - Specifies the state of the redraw flag. If this parameter
|
|
// is TRUE, the redraw flag is set; if FALSE, the flag is cleared.
|
|
//-----------------------------------------------------------------------
|
|
void EnableRedraw(BOOL bRedraw);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called to initialize the font for the tab control
|
|
// associated with this view.
|
|
//-----------------------------------------------------------------------
|
|
virtual void InitializeFont();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function retrieves the handle of the tooltip control associated
|
|
// with the tab control. The tab control creates a tooltip control if
|
|
// it has the TCS_TOOLTIPS style. You can also assign a tooltip control
|
|
// to a tab control by using the SetToolTips member function.
|
|
// Returns:
|
|
// The handle of the tooltip control if successful; otherwise returns NULL.
|
|
//-----------------------------------------------------------------------
|
|
virtual CToolTipCtrl* GetTips();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to assign a tooltip control to the tab control.
|
|
// You can associate the tooltip control with a tab control by making
|
|
// a call to GetToolTips.
|
|
// Parameters:
|
|
// pWndTip - Pointer to a tooltip control.
|
|
//-----------------------------------------------------------------------
|
|
virtual void SetTips(CToolTipCtrl* pWndTip);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to register a tab with the tooltip control so
|
|
// that the information stored in the tooltip is displayed when the cursor
|
|
// is on the tab.
|
|
// Parameters:
|
|
// nIDTab - Index of the tab.
|
|
// lpszText - Pointer to the text for the tool.
|
|
//-----------------------------------------------------------------------
|
|
virtual void AddToolTip(UINT nIDTab, LPCTSTR lpszText);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to update the tooltip text for the specified tab.
|
|
// Parameters:
|
|
// nIDTab - Index of the tab.
|
|
// pViewClass - CRuntimeClass associated with the tab.
|
|
// lpszText - Pointer to the text for the tool.
|
|
//-----------------------------------------------------------------------
|
|
virtual void UpdateToolTip(int nIDTab, LPCTSTR lpszText);
|
|
virtual void UpdateToolTip(CRuntimeClass* pViewClass, LPCTSTR lpszText); // <combine CXTPTabExBase::UpdateToolTip@int@LPCTSTR>
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called to reset the values for the tooltip
|
|
// control based upon the information stored for each tab.
|
|
//-----------------------------------------------------------------------
|
|
virtual void ResetToolTips();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to enable or disable tooltip usage.
|
|
// Parameters:
|
|
// bEnable - TRUE to enable tooltip usage.
|
|
// Returns:
|
|
// TRUE if the tooltip control was found and updated, otherwise returns
|
|
// FALSE.
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL EnableToolTipsEx(BOOL bEnable);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to add a view to the tab control associated
|
|
// with this view.
|
|
// Parameters:
|
|
// lpszLabel - Pointer to the text for the tab associated with the view.
|
|
// pView - An existing view to be added to the tab control.
|
|
// pViewClass - CView runtime class associated with the tab.
|
|
// pDoc - CDocument associated with the view.
|
|
// pContext - Create context for the view.
|
|
// iIndex - -1 to add to the end.
|
|
// iIconIndex - Icon index for the tab. If -1, 'iIndex' is used to determine the index.
|
|
// lParam - Application defined parameter
|
|
// Returns:
|
|
// TRUE if successful, otherwise returns FALSE.
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL AddView(LPCTSTR lpszLabel, CView* pView, int iIndex = -1, int iIconIndex = -1, LPARAM lParam = 0);
|
|
virtual BOOL AddView(LPCTSTR lpszLabel, CRuntimeClass* pViewClass, CDocument* pDoc = NULL, CCreateContext* pContext = NULL, int iIndex = -1, int iIconIndex = -1, LPARAM lParam = 0); // <combine CXTPTabExBase::AddView@LPCTSTR@CView*@int@int@LPARAM>
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called to add a control to the tab control
|
|
// associated with this view.
|
|
// Parameters:
|
|
// lpszLabel - Pointer to the text for the tab associated with the view.
|
|
// pWnd - CWnd object associated with the tab.
|
|
// iIndex - Tab index of where to insert the new view. Default is -1 to add to
|
|
// the end.
|
|
// iIconIndex - Icon index for the tab. If -1, 'iIndex' is used to determine the index.
|
|
// lParam - Application defined parameter
|
|
// Returns:
|
|
// TRUE if successful, otherwise returns FALSE.
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL AddControl(LPCTSTR lpszLabel, CWnd* pWnd, int iIndex = -1, int iIconIndex = -1, LPARAM lParam = 0);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function returns a pointer to a view from the specified
|
|
// runtime class.
|
|
// Parameters:
|
|
// nView - Tab index.
|
|
// pViewClass - CView runtime class associated with the tab.
|
|
// Returns:
|
|
// A pointer to a CView object, otherwise returns NULL.
|
|
//-----------------------------------------------------------------------
|
|
virtual CWnd* GetView(int nView);
|
|
virtual CWnd* GetView(CRuntimeClass* pViewClass); // <combine CXTPTabExBase::GetView@int>
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function returns a pointer to the active view associated
|
|
// with the selected tab.
|
|
// Returns:
|
|
// A pointer to the active view, otherwise returns NULL.
|
|
//-----------------------------------------------------------------------
|
|
virtual CWnd* GetActiveView();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called to activate the specified view and deactivate
|
|
// all remaining views.
|
|
// Parameters:
|
|
// pTabView - CWnd object to make active.
|
|
//-----------------------------------------------------------------------
|
|
virtual void ActivateView(CWnd* pTabView);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function will set a view active based on the specified
|
|
// runtime class.
|
|
// Parameters:
|
|
// nActiveTab - Tab index.
|
|
// pTabView - CWnd object to make active.
|
|
// pViewClass - CView runtime class associated with the tab.
|
|
//-----------------------------------------------------------------------
|
|
virtual void SetActiveView(int nActiveTab);
|
|
virtual void SetActiveView(CWnd* pTabView); // <combine CXTPTabExBase::SetActiveView@int>
|
|
virtual void SetActiveView(CRuntimeClass* pViewClass); // <combine CXTPTabExBase::SetActiveView@int>
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function will remove a view based on the specified
|
|
// tab index.
|
|
// Parameters:
|
|
// nView - Tab index of the view.
|
|
// pView - Points to the CWnd object associated with the tab.
|
|
// pViewClass - CView runtime class associated with the tab.
|
|
// bDestroyWnd - TRUE to destroy the list item.
|
|
//-----------------------------------------------------------------------
|
|
virtual void DeleteView(int nView, BOOL bDestroyWnd = TRUE);
|
|
virtual void DeleteView(CWnd* pView, BOOL bDestroyWnd = TRUE); // <combine CXTPTabExBase::DeleteView@int@BOOL>
|
|
virtual void DeleteView(CRuntimeClass* pViewClass, BOOL bDestroyWnd = TRUE); // <combine CXTPTabExBase::DeleteView@int@BOOL>
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function will return the name for a view based on the tab
|
|
// index.
|
|
// Parameters:
|
|
// nView - Tab index of the view.
|
|
// pViewClass - CView runtime class associated with the tab.
|
|
// Returns:
|
|
// A NULL terminated string that represents the tab item text.
|
|
//-----------------------------------------------------------------------
|
|
virtual LPCTSTR GetViewName(int nView);
|
|
virtual LPCTSTR GetViewName(CRuntimeClass* pViewClass); // <combine CXTPTabExBase::GetViewName@int>
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called when the tab control is resized.
|
|
// It is responsible for updating internal structures that are
|
|
// dependent on the control's size
|
|
//-----------------------------------------------------------------------
|
|
virtual void RecalcLayout();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Helper methods
|
|
// Parameters:
|
|
// hDWP - Handle to a multiple-window - position structure that contains
|
|
// size and position information for one or more windows.
|
|
// pView - A pointer to a CWnd object to be resized.
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL Defer(HDWP& hDWP, CWnd* pView);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to resize the tab view specified by 'pView'.
|
|
// Parameters:
|
|
// pView - A pointer to a CWnd object to be resized.
|
|
//-----------------------------------------------------------------------
|
|
virtual void ResizeTabView(CWnd* pView);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is used by the tab control bar to remove an item
|
|
// from the tab view list.
|
|
// Parameters:
|
|
// pos - The POSITION value of the item to be removed.
|
|
// bDestroyWnd - TRUE to destroy the list item.
|
|
//-----------------------------------------------------------------------
|
|
virtual void RemoveListItem(POSITION pos, BOOL bDestroyWnd = TRUE);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to remove all the tabs, including all associated
|
|
// views.
|
|
// Parameters:
|
|
// bDestroyWnd - TRUE to destroy the window associated with the tab item.
|
|
// Returns:
|
|
// TRUE if successful, otherwise returns FALSE.
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL RemoveAllTabs(BOOL bDestroyWnd = TRUE);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to retrieve the tab index from the current cursor
|
|
// position.
|
|
// Parameters:
|
|
// point - Pointer to a CPoint object that contains the cursor screen coordinates.
|
|
// Use default for current cursor position.
|
|
// Returns:
|
|
// An integer based index of the tab; or -1, if no tab is at the specified 'point'.
|
|
//-----------------------------------------------------------------------
|
|
virtual int GetTabFromPoint(CPoint point);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to see if the specified CWnd object is a
|
|
// child of the tab control.
|
|
// Parameters:
|
|
// pView - A pointer to a CWnd object.
|
|
// Returns:
|
|
// TRUE if the specified CWnd object is a child of the tab control, otherwise
|
|
// returns FALSE.
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL IsChildView(CWnd* pView);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to set the text for the specified tab.
|
|
// Parameters:
|
|
// nTab - Index of the tab.
|
|
// pView - CWnd object associated with the tab.
|
|
// pViewClass - CRuntimeClass of the CWnd associated with the tab.
|
|
// lpszLabel - New text for the tab label.
|
|
// Returns:
|
|
// TRUE if successful, otherwise returns FALSE.
|
|
//-----------------------------------------------------------------------
|
|
BOOL SetTabText(int nTab, LPCTSTR lpszLabel);
|
|
BOOL SetTabText(CWnd* pView, LPCTSTR lpszLabel); // <combine CXTPTabExBase::SetTabText@int@LPCTSTR>
|
|
BOOL SetTabText(CRuntimeClass* pViewClass, LPCTSTR lpszLabel); // <combine CXTPTabExBase::SetTabText@int@LPCTSTR>
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called to activate the next view in the tab
|
|
// control.
|
|
// Returns:
|
|
// A CWnd pointer to the newly activated view.
|
|
//-----------------------------------------------------------------------
|
|
CWnd* NextView();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called to activate the previous view in the
|
|
// tab control.
|
|
// Returns:
|
|
// A CWnd pointer to the newly activated view.
|
|
//-----------------------------------------------------------------------
|
|
CWnd* PrevView();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to enable or disable the tab auto-condensing
|
|
// mode. Auto-condensing mode affects the tab control's behavior when
|
|
// there is not enough room to fit all tabs. Without auto-condensation,
|
|
// the CXTPTabCtrl control behaves like a standard tab control (i.e. it
|
|
// will display a slider control that allows the user to pan between tabs).
|
|
// With the auto-condensing mode enabled, CXTPTabCtrl attempts to fit all
|
|
// tabs in the available space by trimming the tab label text. This behavior
|
|
// is similar to the behavior displayed by Visual C++'s Workspace View.
|
|
// For instance, you can see the FileView tab shrink if you shrink the
|
|
// Workspace View.
|
|
// Parameters:
|
|
// bEnable - TRUE to enable auto-condense mode.
|
|
//-----------------------------------------------------------------------
|
|
void SetAutoCondense(BOOL bEnable);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function returns the state of the tab control's auto-condense
|
|
// mode. See SetAutoCondense() for a full explanation of this mode.
|
|
// Returns:
|
|
// TRUE if auto-condense is enabled, or FALSE if it is disabled.
|
|
//-----------------------------------------------------------------------
|
|
BOOL GetAutoCondense();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function will modify the style for the tab control associated
|
|
// with this view and set the appropriate font depending on the tab's
|
|
// orientation.
|
|
// Parameters:
|
|
// dwRemove - Specifies window styles to be removed during style modification.
|
|
// dwAdd - Specifies window styles to be added during style modification.
|
|
// nFlags - Flags to be passed to SetWindowPos, or zero if SetWindowPos should
|
|
// not be called. The default is zero. See CWnd::ModifyStyle for more
|
|
// details.
|
|
// Returns:
|
|
// Nonzero if the style was successfully modified, otherwise returns zero.
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL ModifyTabStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is used to get the last known view that belongs
|
|
// to the frame.
|
|
// Returns:
|
|
// A CView pointer to the last known view.
|
|
//-----------------------------------------------------------------------
|
|
CView* GetLastKnownChildView();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is used to set the resource ID for the popup menu
|
|
// used by the tab control.
|
|
// Parameters:
|
|
// popupMenuID - ID for the tab control popup menu.
|
|
// nPos - Index position in the menu resource.
|
|
//-----------------------------------------------------------------------
|
|
virtual void SetMenuID(UINT popupMenuID, int nPos = 0);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function returns the menu resource associated with the
|
|
// tab control.
|
|
// Returns:
|
|
// The resource ID of the menu associated with the tab control.
|
|
//-----------------------------------------------------------------------
|
|
virtual UINT GetMenuID();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to allow WM_INITIALUPATE message to be sent
|
|
// to views after creation.
|
|
// Parameters:
|
|
// bInitialUpdate - TRUE to send initial update message.
|
|
//-----------------------------------------------------------------------
|
|
virtual void SendInitialUpdate(BOOL bInitialUpdate);
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called whenever the theme has changed.
|
|
// See Also:
|
|
// CXTPControlThemeManagerStyleHost::OnThemeChanged(), CXTPHeaderCtrl::OnThemeChanged()
|
|
//-----------------------------------------------------------------------
|
|
virtual void OnThemeChanged();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Override this member function to handle a TCN_SELCHANGING event in
|
|
// your derived class to provide additional functionality.
|
|
// See Also:
|
|
// OnSelChange, TCN_XTP_SELCHANGE, TCN_XTP_SELCHANGING
|
|
//-----------------------------------------------------------------------
|
|
virtual void OnSelChanging();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Override this member function to handle a TCN_SELCHANGE event in
|
|
// your derived class to provide additional functionality.
|
|
// See Also:
|
|
// OnSelChanging, TCN_XTP_SELCHANGE, TCN_XTP_SELCHANGING
|
|
//-----------------------------------------------------------------------
|
|
virtual void OnSelChange();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called to set the tooltip and tab text for
|
|
// the specified tab.
|
|
// Parameters:
|
|
// nTab - Index of the tab.
|
|
// pMember - Address of an CXTPTcbItem struct associated with the tab.
|
|
// lpszLabel - NULL terminated string that represents the new tab label.
|
|
// Returns:
|
|
// TRUE if successful, otherwise returns FALSE.
|
|
//-----------------------------------------------------------------------
|
|
BOOL UpdateTabLabel(int nTab, CXTPTcbItem* pMember, LPCTSTR lpszLabel);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function creates the CWnd object that is associated
|
|
// with a tab control item.
|
|
// Parameters:
|
|
// pViewClass - CView runtime class to be created.
|
|
// pDocument - CDocument associated with view.
|
|
// pContext - Create context for the view.
|
|
// Returns:
|
|
// A pointer to the newly created CWnd object, otherwise returns NULL.
|
|
//-----------------------------------------------------------------------
|
|
virtual CWnd* CreateTabView(CRuntimeClass *pViewClass, CDocument *pDocument, CCreateContext* pContext);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is used internally by the tab control to calculate
|
|
// the width of a tab based on its label text.
|
|
// Parameters:
|
|
// pDC - Points to the current device context.
|
|
// sLabel - Represents the tab label text.
|
|
// bHasIcon - Set to true if the tab item has an icon.
|
|
// Returns:
|
|
// An integer value that represents the width of a tab.
|
|
//-----------------------------------------------------------------------
|
|
int CalculateTabWidth(CDC* pDC, CString& sLabel, bool bHasIcon);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is used internally by the tab control to shrink,
|
|
// or un-shrink, tabs based on the control's width and the state of the
|
|
// auto-condensation mode. See SetAutoCondense() for more information.
|
|
//-----------------------------------------------------------------------
|
|
void Condense();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function is called by the CXTPTabExBase class to
|
|
// perform initialization when the window is created or sub-classed.
|
|
// Returns:
|
|
// TRUE if the window was successfully initialized, otherwise FALSE.
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL Init();
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo);
|
|
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
|
virtual void OnPreWindowPosChanged(WINDOWPOS FAR* lpwndpos);
|
|
virtual void OnPostWindowPosChanged();
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
|
afx_msg void OnDestroy();
|
|
afx_msg BOOL OnSelchange(NMHDR* pNMHDR, LRESULT* pResult);
|
|
afx_msg BOOL OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult);
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
public:
|
|
CList <CXTPTcbItem*, CXTPTcbItem*> m_tcbItems; // Template list containing tab information.
|
|
|
|
protected:
|
|
int m_nPos; // Index of the popup menu contained in the menu.
|
|
UINT m_popupMenuID; // Popup menu resource ID.
|
|
BOOL m_bInitialUpdate; // TRUE to send initial update to views when created.
|
|
CWnd* m_pParentWnd; // Points to the parent and will equal 'm_pParentFrame' in non-dialog applications.
|
|
CView* m_pLastActiveView; // Points to the last active view that belongs to the main frame window.
|
|
CFrameWnd* m_pParentFrame; // Points to the parent frame.
|
|
|
|
private:
|
|
int m_nOldIndex;
|
|
};
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
AFX_INLINE CWnd* CXTPTabExBase::GetActiveView() {
|
|
return GetView(m_pTabCtrl->GetCurSel());
|
|
}
|
|
AFX_INLINE CView* CXTPTabExBase::GetLastKnownChildView() {
|
|
return m_pLastActiveView;
|
|
}
|
|
AFX_INLINE void CXTPTabExBase::SetMenuID(UINT popupMenuID, int nPos) {
|
|
m_popupMenuID = popupMenuID; m_nPos = nPos;
|
|
}
|
|
AFX_INLINE UINT CXTPTabExBase::GetMenuID() {
|
|
ASSERT(::IsWindow(m_pTabCtrl->GetSafeHwnd())); return m_popupMenuID;
|
|
}
|
|
AFX_INLINE void CXTPTabExBase::SendInitialUpdate(BOOL bInitialUpdate) {
|
|
m_bInitialUpdate = bInitialUpdate;
|
|
}
|
|
|
|
//===========================================================================
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
class _XTP_EXT_CLASS CXTPTabCtrlBaseEx : public CXTPTabExBase // CXTPTabCtrlBaseEx deprecated, use CXTPTabExBase instead (included for backward compatibility).
|
|
{
|
|
public:
|
|
virtual BOOL EnableToolTipsImpl(BOOL bEnable) {
|
|
return CXTPTabExBase::EnableToolTipsEx(bEnable);
|
|
}
|
|
protected:
|
|
void OnRButtonDownImpl(UINT nFlags, CPoint point) {
|
|
CXTPTabExBase::OnRButtonDown(nFlags, point);
|
|
}
|
|
int OnCreateImpl_Post(LPCREATESTRUCT lpCreateStruct) {
|
|
return CXTPTabExBase::OnCreate(lpCreateStruct);
|
|
}
|
|
void OnDestroyImpl_Pre() {
|
|
CXTPTabExBase::OnDestroy();
|
|
}
|
|
BOOL OnSelchangeImpl(NMHDR* pNMHDR, LRESULT* pResult) {
|
|
return CXTPTabExBase::OnSelchange(pNMHDR, pResult);
|
|
}
|
|
BOOL OnSelchangingImpl(NMHDR* pNMHDR, LRESULT* pResult) {
|
|
return CXTPTabExBase::OnSelchanging(pNMHDR, pResult);
|
|
}
|
|
void OnWindowPosChangedImpl_Pre(WINDOWPOS FAR* lpwndpos) {
|
|
CXTPTabExBase::OnPreWindowPosChanged(lpwndpos);
|
|
}
|
|
void OnWindowPosChangedImpl_Post(WINDOWPOS FAR*) {
|
|
CXTPTabExBase::OnPostWindowPosChanged();
|
|
}
|
|
BOOL PreTranslateMessageImpl(MSG* pMsg) {
|
|
return CXTPTabExBase::PreTranslateMessage(pMsg);
|
|
}
|
|
void PreSubclassWindowImpl_Post() {
|
|
CXTPTabExBase::PreSubclassWindow();
|
|
}
|
|
BOOL OnCmdMsgImpl_Pre(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) {
|
|
return CXTPTabExBase::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
|
|
}
|
|
LRESULT OnInitializeImpl(WPARAM, LPARAM) {
|
|
ASSERT(0); return 0; // this is deprecated, tab is self initializing via Init().
|
|
}
|
|
void OnInitialUpdateImpl() {
|
|
CXTPTabExBase::Init();
|
|
}
|
|
};
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
#define DECLATE_TABCTRLEX_BASE(ClassName, Tab, Base)\
|
|
class _XTP_EXT_CLASS ClassName : public Tab, public Base \
|
|
{ \
|
|
protected: \
|
|
virtual void PreSubclassWindow() { \
|
|
Tab::PreSubclassWindow(); \
|
|
Base::PreSubclassWindow(); \
|
|
} \
|
|
virtual BOOL PreCreateWindow(CREATESTRUCT& cs) {\
|
|
if (!Tab::PreCreateWindow(cs))\
|
|
return FALSE;\
|
|
return Base::PreCreateWindow(cs);\
|
|
} \
|
|
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { \
|
|
if (Base::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) \
|
|
return TRUE; \
|
|
return Tab::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); \
|
|
} \
|
|
virtual BOOL PreTranslateMessage(MSG* pMsg) { \
|
|
if (Base::PreTranslateMessage(pMsg)) \
|
|
return TRUE; \
|
|
return Tab::PreTranslateMessage(pMsg); \
|
|
} \
|
|
afx_msg void OnPaint() { \
|
|
Base::OnPaint(); \
|
|
} \
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC) { \
|
|
return Base::OnEraseBkgnd(pDC); \
|
|
} \
|
|
afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection) { \
|
|
Tab::OnSettingChange(uFlags, lpszSection); \
|
|
Base::OnSettingChange(uFlags, lpszSection); \
|
|
} \
|
|
afx_msg void OnSysColorChange() { \
|
|
Tab::OnSysColorChange(); \
|
|
Base::OnSysColorChange(); \
|
|
} \
|
|
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct) { \
|
|
if (Tab::OnCreate(lpCreateStruct) == -1) \
|
|
return -1; \
|
|
return Base::OnCreate(lpCreateStruct); \
|
|
} \
|
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point) { \
|
|
Base::OnRButtonDown(nFlags, point); \
|
|
} \
|
|
afx_msg void OnDestroy() { \
|
|
Base::OnDestroy(); \
|
|
Tab::OnDestroy(); \
|
|
} \
|
|
afx_msg BOOL OnSelchange(NMHDR* pNMHDR, LRESULT* pResult) { \
|
|
return Base::OnSelchange(pNMHDR, pResult); \
|
|
} \
|
|
afx_msg BOOL OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult) { \
|
|
return Base::OnSelchanging(pNMHDR, pResult); \
|
|
} \
|
|
afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos) { \
|
|
Base::OnPreWindowPosChanged(lpwndpos); \
|
|
Tab::OnWindowPosChanged(lpwndpos); \
|
|
Base::OnPostWindowPosChanged(); \
|
|
} \
|
|
afx_msg LRESULT OnSetTheme(WPARAM wParam, LPARAM lParam) {\
|
|
return Base::OnSetTheme(wParam, lParam);\
|
|
} \
|
|
};
|
|
|
|
#define ON_TABCTRLEX_REFLECT \
|
|
ON_WM_CREATE() \
|
|
ON_WM_DESTROY() \
|
|
ON_WM_RBUTTONDOWN() \
|
|
ON_WM_WINDOWPOSCHANGED() \
|
|
ON_NOTIFY_REFLECT_EX(TCN_SELCHANGE, OnSelchange) \
|
|
ON_NOTIFY_REFLECT_EX(TCN_SELCHANGING, OnSelchanging) \
|
|
ON_TABCTRL_REFLECT
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
#endif // __XTTABCTRLBASE_H__
|