Files
FC1/Editor/XT/Include/XTReBar.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

224 lines
10 KiB
C++

// XTReBar.h interface for the CXTReBar class.
//
// This file is a part of the Xtreme Toolkit for MFC.
// ©1998-2003 Codejock Software, All Rights Reserved.
//
// This source code can only be used under the terms and conditions
// outlined in the accompanying license agreement.
//
// support@codejock.com
// http://www.codejock.com
//
//////////////////////////////////////////////////////////////////////
#if !defined(__XTREBAR_H__)
#define __XTREBAR_H__
// import base class
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// class forwards
class CXTReBarCtrl;
class CXTNewCustomBarRequest;
//////////////////////////////////////////////////////////////////////
// Summary: CXTReBar is a CXTControlBar derived class. It is used to create a CXTReBar
// object. A CXTReBar object is a control bar that provides layout, persistence,
// and state information for rebar controls.
//
// A rebar object can contain a variety of child windows, usually other
// controls, including edit boxes, toolbars, and list boxes. A rebar object
// can display its child windows over a specified bitmap. Your application
// can automatically resize the rebar, or the user can manually resize
// the rebar by clicking or dragging its gripper bar.
//
// <b>Rebar Control</b>
//
// A rebar object behaves similarly to a toolbar object. A rebar uses
// the click-and-drag mechanism to resize its bands. A rebar control can
// contain one or more bands, with each band having any combination of
// a gripper bar, a bitmap, a text label, and a child window. However,
// bands cannot contain more than one child window.
//
// CXTReBar uses the CXTReBarCtrl class to provide its implementation.
// You can access the rebar control through GetReBarCtrl to take advantage
// of the control's customization options. For more information about
// rebar controls, see CXTReBarCtrl. For more information about using
// rebar controls, see Using CXTReBarCtrl in the XTreme Toolkit online
// help.
//
// <b>Warning</b> Rebar and rebar control objects do not support MFC
// control bar docking. If CRebar::EnableDocking is called, your application
// will assert.
class _XT_EXT_CLASS CXTReBar : public CXTControlBar
{
DECLARE_DYNAMIC(CXTReBar)
public:
// Summary: Constructs a CXTReBar object.
CXTReBar();
// Input: pParentWnd - Pointer to the CWnd object whose Windows window is the parent of the
// status bar. This is normally your frame window.
// dwCtrlStyle - The rebar control style. By default, RBS_BANDBORDERS, which displays
// narrow lines to separate adjacent bands within the rebar control.
// See Rebar Control Styles in the Platform SDK for a list of styles.
// dwStyle - The rebar window styles.
// nID - The rebar's child-window ID.
// Returns: Nonzero if successful, otherwise returns zero.
// Summary: Call this member function to create a rebar.
BOOL Create(CWnd* pParentWnd,DWORD dwCtrlStyle = RBS_BANDBORDERS,DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_TOP,UINT nID = AFX_IDW_REBAR);
// Returns: A reference to a CXTReBarCtrl object.
// Example: <pre>CXTReBarCtrl& refReBarCtrl = m_wndReBar.GetReBarCtrl();</pre>
//
// <pre>
// UINT nBandCount = refReBarCtrl.GetBandCount();
// CString msg;
// msg.Format("Band Count is: %u", nBandCount);
// AfxMessageBox(msg);</pre>
// Summary: This member function allows direct access to the underlying common
// control. Call this member function to take advantage of the functionality
// of the Windows rebar common control in customizing your rebar. When
// you call GetReBarCtrl, it returns a reference object to the CXTReBarCtrl
// object so you can use either set of member functions.
//
// For more information about using CXTReBarCtrl to customize your rebar,
// see Using CXTReBarCtrl in the XTreme Toolkit online help.
CXTReBarCtrl& GetReBarCtrl() const;
// Input: pBar - A pointer to a CWnd object that is the child window to be inserted
// into the rebar. The referenced object must have a WS_CHILD.
// pszText - A pointer to a string containing the text to appear on the rebar.
// NULL by default. The text contained in 'pszText' is not part of the
// child window. It is on the rebar itself.
// pbmp - A pointer to a CBitmap object to be displayed on the rebar background.
// NULL by default.
// dwStyle - A DWORD containing the style to apply to the rebar. See the 'fStyle'
// function description in the Win32 structure REBARBANDINFO for a complete
// list of band styles.
// Example: <pre>
// // Define a pointer to a CRebar in your class definition,
// // such as: CReBar* m_pReBar; More often, however, you
// // would probably specify an instance in your class
// // definition, such as: CReBar m_ReBar;
// m_pReBar = new CReBar();
// m_pReBar->Create(this);
// m_wndDlgBar.Create(this, IDR_MAINFRAME, CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR);
// m_pReBar->AddBar(&m_wndDlgBar);</pre>
// Returns: Nonzero if successful, otherwise returns zero.
// Summary: Call this member function to add a band to the rebar.
BOOL AddBar(CWnd* pBar,LPCTSTR pszText = NULL,CBitmap* pbmp = NULL,DWORD dwStyle = RBBS_GRIPPERALWAYS | RBBS_FIXEDBMP);
// Input: pBar - A pointer to a CWnd object that is the child window to be inserted
// into the rebar. The referenced object must have a WS_CHILD.
// clrFore - An RGB value that represents the foreground color of the rebar.
// clrBack - An RGB value that represents the background color of the rebar.
// pszText - A pointer to a string containing the text to appear on the rebar.
// NULL by default. The text contained in 'pszText' is not part of the
// child window. It is on the rebar itself.
// dwStyle - A DWORD containing the style to apply to the rebar. See the 'fStyle'
// function description in the Win32 structure REBARBANDINFO for a complete
// list of band styles.
// Example: <pre>
// // Define a pointer to a CRebar in your class definition,
// // such as: CReBar* m_pReBar; More often, however, you
// // would probably specify an instance in your class
// // definition, such as: CReBar m_ReBar;
// m_pReBar = new CReBar();
// m_pReBar->Create(this);
// m_wndDlgBar.Create(this, IDR_MAINFRAME, CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR);
// m_pReBar->AddBar(&m_wndDlgBar);</pre>
// Returns: Nonzero if successful, otherwise returns zero.
// Summary: Call this member function to add a band to the rebar.
BOOL AddBar(CWnd* pBar,COLORREF clrFore,COLORREF clrBack,LPCTSTR pszText = NULL,DWORD dwStyle = RBBS_GRIPPERALWAYS);
// Input: pBar - A pointer to a CWnd object that is the child window to be inserted
// into the rebar. The referenced object must have a WS_CHILD.
// pRBBI - Points to a REBARBANDINFO struct that contains information about
// the band added to a rebar control.
// Example: <pre>
// // Define a pointer to a CRebar in your class definition,
// // such as: CReBar* m_pReBar; More often, however, you
// // would probably specify an instance in your class
// // definition, such as: CReBar m_ReBar;
// m_pReBar = new CReBar();
// m_pReBar->Create(this);
// m_wndDlgBar.Create(this, IDR_MAINFRAME, CBRS_ALIGN_TOP, AFX_IDW_DIALOGBAR);
// m_pReBar->AddBar(&m_wndDlgBar);</pre>
// Returns: Nonzero if successful, otherwise returns zero.
// Summary: Call this member function to add a band to the rebar.
BOOL AddBar(CWnd* pBar,REBARBANDINFO* pRBBI);
// Input: lpszSection - Name of a section in the initialization file or a key in the Windows
// registry where state information is stored.
// Summary: Call this function to store information about the rebar owned by the
// frame window. This information can be read from the initialization
// file using LoadState. Information stored includes visibility,
// horizontal and vertical orientation, band size, and control bar position.
void SaveState(LPCTSTR lpszSection);
// Input: lpszSection - Name of a section in the initialization file or a key in the Windows
// registry where state information is stored.
// Summary: Call this function to restore the settings of the rebar owned by the
// frame window. This information is written to the initialization file
// using SaveState. Information restored includes visibility,
// horizontal and vertical orientation, band size, and control bar position.
void LoadState(LPCTSTR lpszSection);
// Ignore:
//{{AFX_VIRTUAL(CXTReBar)
public:
virtual void OnUpdateCmdUI(CFrameWnd* pTarget,BOOL bDisableIfNoHndler);
virtual INT_PTR OnToolHitTest(CPoint point,TOOLINFO* pTI) const;
virtual CSize CalcFixedLayout(BOOL bStretch,BOOL bHorz);
virtual CSize CalcDynamicLayout(int nLength,DWORD nMode);
protected:
virtual LRESULT WindowProc(UINT message,WPARAM wParam,LPARAM lParam);
//}}AFX_VIRTUAL
int m_iBandCount;
// Ignore:
//{{AFX_MSG(CXTReBar)
afx_msg BOOL OnNcCreate(LPCREATESTRUCT);
afx_msg void OnPaint();
afx_msg void OnHeightChange(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnNcPaint();
afx_msg void OnNcCalcSize(BOOL, NCCALCSIZE_PARAMS*);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg LRESULT OnShowBand(WPARAM wParam, LPARAM lParam);
afx_msg void OnRecalcParent();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG
afx_msg void OnChildSize(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg LRESULT OnIdealSizeChanged(WPARAM wParam, LPARAM lParam);
void OnBarDestroyed(CControlBar* pBar);
void SaveCustomBars(LPCTSTR pszSection);
void LoadCustomBars(LPCTSTR pszSection);
void CreateBar(CXTNewCustomBarRequest* pRequest);
public:
void PlaceNewBar(CFrameWnd* pFrame, CControlBar* pBar);
protected:
DECLARE_MESSAGE_MAP()
};
//////////////////////////////////////////////////////////////////////
AFX_INLINE CXTReBarCtrl& CXTReBar::GetReBarCtrl() const {
return *(CXTReBarCtrl*)this;
}
//////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // #if !defined(__XTREBAR_H__)