|
|
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#ifndef __AFXEXT_H__
#define __AFXEXT_H__
#ifndef __AFXWIN_H__
#include <afxwin.h>
#endif
#ifndef __AFXDLGS_H__
#include <afxdlgs.h>
#endif
#ifdef _AFX_MINREBUILD
#pragma component(minrebuild, off)
#endif
#ifndef _AFX_FULLTYPEINFO
#pragma component(mintypeinfo, on)
#endif
#ifdef _AFX_PACKING
#pragma pack(push, _AFX_PACKING)
#endif
/////////////////////////////////////////////////////////////////////////////
// AFXEXT - MFC Advanced Extensions and Advanced Customizable classes
// Classes declared in this file
//CObject
//CCmdTarget;
//CWnd
//CButton
class CBitmapButton; // Bitmap button (self-draw)
class CControlBar; // control bar
class CStatusBar; // status bar
class CToolBar; // toolbar
class CDialogBar; // dialog as control bar
#if _MFC_VER >= 0x0600
class CReBar; // ie40 dock bar
#endif
class CSplitterWnd; // splitter manager
//CView
//CScrollView
class CFormView; // view with a dialog template
class CEditView; // simple text editor view
//CDC
class CMetaFileDC; // a metafile with proxy
class CRectTracker; // tracker for rectangle objects
// information structures
struct CPrintInfo; // Printing context
struct CPrintPreviewState; // Print Preview context/state
struct CCreateContext; // Creation context
#undef AFX_DATA
#define AFX_DATA AFX_CORE_DATA
/////////////////////////////////////////////////////////////////////////////
// Simple bitmap button
// CBitmapButton - push-button with 1->4 bitmap images
class CBitmapButton : public CButton { DECLARE_DYNAMIC(CBitmapButton) public: // Construction
CBitmapButton();
BOOL LoadBitmaps(LPCTSTR lpszBitmapResource, LPCTSTR lpszBitmapResourceSel = NULL, LPCTSTR lpszBitmapResourceFocus = NULL, LPCTSTR lpszBitmapResourceDisabled = NULL); BOOL LoadBitmaps(UINT nIDBitmapResource, UINT nIDBitmapResourceSel = 0, UINT nIDBitmapResourceFocus = 0, UINT nIDBitmapResourceDisabled = 0); BOOL AutoLoad(UINT nID, CWnd* pParent);
// Operations
void SizeToContent();
// Implementation:
public: #ifdef _DEBUG
virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif
protected: // all bitmaps must be the same size
CBitmap m_bitmap; // normal image (REQUIRED)
CBitmap m_bitmapSel; // selected image (OPTIONAL)
CBitmap m_bitmapFocus; // focused but not selected (OPTIONAL)
CBitmap m_bitmapDisabled; // disabled bitmap (OPTIONAL)
virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS); };
/////////////////////////////////////////////////////////////////////////////
// Control Bars
// forward declarations (private to implementation)
class CDockBar; class CDockContext; class CControlBarInfo; struct AFX_SIZEPARENTPARAMS;
// Layout Modes for CalcDynamicLayout
#define LM_STRETCH 0x01 // same meaning as bStretch in CalcFixedLayout. If set, ignores nLength
// and returns dimensions based on LM_HORZ state, otherwise LM_HORZ is used
// to determine if nLength is the desired horizontal or vertical length
// and dimensions are returned based on nLength
#define LM_HORZ 0x02 // same as bHorz in CalcFixedLayout
#define LM_MRUWIDTH 0x04 // Most Recently Used Dynamic Width
#define LM_HORZDOCK 0x08 // Horizontal Docked Dimensions
#define LM_VERTDOCK 0x10 // Vertical Docked Dimensions
#define LM_LENGTHY 0x20 // Set if nLength is a Height instead of a Width
#define LM_COMMIT 0x40 // Remember MRUWidth
#ifdef _AFXDLL
class CControlBar : public CWnd #else
class AFX_NOVTABLE CControlBar : public CWnd #endif
{ DECLARE_DYNAMIC(CControlBar) // Construction
protected: CControlBar();
// Attributes
public: int GetCount() const;
// for styles specific to CControlBar
DWORD GetBarStyle(); void SetBarStyle(DWORD dwStyle);
BOOL m_bAutoDelete;
#if _MFC_VER >= 0x0600
// getting and setting border space
void SetBorders(LPCRECT lpRect); void SetBorders(int cxLeft = 0, int cyTop = 0, int cxRight = 0, int cyBottom = 0); CRect GetBorders() const; #endif
CFrameWnd* GetDockingFrame() const; BOOL IsFloating() const; virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz); virtual CSize CalcDynamicLayout(int nLength, DWORD nMode);
// Operations
void EnableDocking(DWORD dwDockStyle);
// Overridables
virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler) = 0;
// Implementation
public: virtual ~CControlBar(); #ifdef _DEBUG
virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif
virtual void DelayShow(BOOL bShow); virtual BOOL IsVisible() const; virtual DWORD RecalcDelayShow(AFX_SIZEPARENTPARAMS* lpLayout);
virtual BOOL IsDockBar() const; virtual BOOL DestroyWindow(); virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle);
// info about bar (for status bar and toolbar)
int m_cxLeftBorder, m_cxRightBorder; int m_cyTopBorder, m_cyBottomBorder; int m_cxDefaultGap; // default gap value
UINT m_nMRUWidth; // For dynamic resizing.
// array of elements
int m_nCount; void* m_pData; // m_nCount elements - type depends on derived class
// support for delayed hide/show
enum StateFlags { delayHide = 1, delayShow = 2, tempHide = 4, statusSet = 8 }; UINT m_nStateFlags;
// support for docking
DWORD m_dwStyle; // creation style (used for layout)
DWORD m_dwDockStyle;// indicates how bar can be docked
CFrameWnd* m_pDockSite; // current dock site, if dockable
CDockBar* m_pDockBar; // current dock bar, if dockable
CDockContext* m_pDockContext; // used during dragging
virtual BOOL PreTranslateMessage(MSG* pMsg); virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual void PostNcDestroy();
virtual void DoPaint(CDC* pDC); void DrawBorders(CDC* pDC, CRect& rect); #if _MFC_VER >= 0x0600
void DrawGripper(CDC* pDC, const CRect& rect); #endif
// implementation helpers
virtual LRESULT WindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam); void CalcInsideRect(CRect& rect, BOOL bHorz) const; // adjusts borders etc
BOOL AllocElements(int nElements, int cbElement); virtual BOOL SetStatusText(int nHit); void ResetTimer(UINT nEvent, UINT nTime); void EraseNonClient();
void GetBarInfo(CControlBarInfo* pInfo); void SetBarInfo(CControlBarInfo* pInfo, CFrameWnd* pFrameWnd);
//{{AFX_MSG(CControlBar)
afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg int OnCreate(LPCREATESTRUCT lpcs); afx_msg void OnDestroy(); afx_msg void OnPaint(); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg void OnWindowPosChanging(LPWINDOWPOS lpWndPos); afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnHelpHitTest(WPARAM wParam, LPARAM lParam); afx_msg void OnInitialUpdate(); afx_msg LRESULT OnIdleUpdateCmdUI(WPARAM wParam, LPARAM lParam); afx_msg void OnLButtonDown(UINT nFlags, CPoint pt ); afx_msg void OnLButtonDblClk(UINT nFlags, CPoint pt); afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT nMsg); //}}AFX_MSG
DECLARE_MESSAGE_MAP()
friend class CFrameWnd; friend class CDockBar; };
/////////////////////////////////////////////////////////////////////////////
// CStatusBar control
class CStatusBarCtrl; // forward reference (see afxcmn.h for definition)
struct AFX_STATUSPANE; // private to implementation
class CStatusBar : public CControlBar { DECLARE_DYNAMIC(CStatusBar)
// Construction
public: CStatusBar(); BOOL Create(CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, UINT nID = AFX_IDW_STATUS_BAR); #if _MFC_VER >= 0x0600
BOOL CreateEx(CWnd* pParentWnd, DWORD dwCtrlStyle = 0, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, UINT nID = AFX_IDW_STATUS_BAR); #endif
BOOL SetIndicators(const UINT* lpIDArray, int nIDCount);
// Attributes
public: #if _MFC_VER >= 0x0600
void SetBorders(LPCRECT lpRect); void SetBorders(int cxLeft = 0, int cyTop = 0, int cxRight = 0, int cyBottom = 0); #endif
// standard control bar things
int CommandToIndex(UINT nIDFind) const; UINT GetItemID(int nIndex) const; void GetItemRect(int nIndex, LPRECT lpRect) const;
// specific to CStatusBar
void GetPaneText(int nIndex, CString& rString) const; CString GetPaneText(int nIndex) const; BOOL SetPaneText(int nIndex, LPCTSTR lpszNewText, BOOL bUpdate = TRUE); void GetPaneInfo(int nIndex, UINT& nID, UINT& nStyle, int& cxWidth) const; void SetPaneInfo(int nIndex, UINT nID, UINT nStyle, int cxWidth); UINT GetPaneStyle(int nIndex) const; void SetPaneStyle(int nIndex, UINT nStyle);
// for direct access to the underlying common control
CStatusBarCtrl& GetStatusBarCtrl() const;
// Overridables
virtual void DrawItem(LPDRAWITEMSTRUCT);
// Implementation
public: virtual ~CStatusBar(); virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz); BOOL PreCreateWindow(CREATESTRUCT& cs); BOOL AllocElements(int nElements, int cbElement); void CalcInsideRect(CRect& rect, BOOL bHorz) const; virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle);
#ifdef _DEBUG
virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; void EnableDocking(DWORD dwDockStyle); #endif
virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
protected: int m_nMinHeight;
AFX_STATUSPANE* _GetPanePtr(int nIndex) const; void UpdateAllPanes(BOOL bUpdateRects, BOOL bUpdateText); virtual BOOL OnChildNotify(UINT message, WPARAM, LPARAM, LRESULT*);
//{{AFX_MSG(CStatusBar)
afx_msg UINT OnNcHitTest(CPoint); afx_msg void OnNcCalcSize(BOOL, NCCALCSIZE_PARAMS*); afx_msg void OnNcPaint(); afx_msg void OnPaint(); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnWindowPosChanging(LPWINDOWPOS); afx_msg LRESULT OnSetText(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnGetText(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnGetTextLength(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnSetMinHeight(WPARAM wParam, LPARAM lParam); //}}AFX_MSG
DECLARE_MESSAGE_MAP() };
// Styles for status bar panes
#define SBPS_NORMAL 0x0000
#define SBPS_NOBORDERS SBT_NOBORDERS
#define SBPS_POPOUT SBT_POPOUT
#define SBPS_OWNERDRAW SBT_OWNERDRAW
#define SBPS_DISABLED 0x04000000
#define SBPS_STRETCH 0x08000000 // stretch to fill status bar
/////////////////////////////////////////////////////////////////////////////
// CToolBar control
HBITMAP AFXAPI AfxLoadSysColorBitmap(HINSTANCE hInst, HRSRC hRsrc, BOOL bMono = FALSE);
class CToolBarCtrl; // forward reference (see afxcmn.h for definition)
class CToolBar : public CControlBar { DECLARE_DYNAMIC(CToolBar)
// Construction
public: CToolBar(); BOOL Create(CWnd* pParentWnd, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_TOP, UINT nID = AFX_IDW_TOOLBAR); #if _MFC_VER >= 0x0600
BOOL CreateEx(CWnd* pParentWnd, DWORD dwCtrlStyle = TBSTYLE_FLAT, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP, CRect rcBorders = CRect(0, 0, 0, 0), UINT nID = AFX_IDW_TOOLBAR); #endif
void SetSizes(SIZE sizeButton, SIZE sizeImage); // button size should be bigger than image
void SetHeight(int cyHeight); // call after SetSizes, height overrides bitmap size
BOOL LoadToolBar(LPCTSTR lpszResourceName); BOOL LoadToolBar(UINT nIDResource); BOOL LoadBitmap(LPCTSTR lpszResourceName); BOOL LoadBitmap(UINT nIDResource); BOOL SetBitmap(HBITMAP hbmImageWell); BOOL SetButtons(const UINT* lpIDArray, int nIDCount); // lpIDArray can be NULL to allocate empty buttons
// Attributes
public: // standard control bar things
int CommandToIndex(UINT nIDFind) const; UINT GetItemID(int nIndex) const; virtual void GetItemRect(int nIndex, LPRECT lpRect) const; UINT GetButtonStyle(int nIndex) const; void SetButtonStyle(int nIndex, UINT nStyle);
// for changing button info
void GetButtonInfo(int nIndex, UINT& nID, UINT& nStyle, int& iImage) const; void SetButtonInfo(int nIndex, UINT nID, UINT nStyle, int iImage); BOOL SetButtonText(int nIndex, LPCTSTR lpszText); CString GetButtonText(int nIndex) const; void GetButtonText(int nIndex, CString& rString) const;
// for direct access to the underlying common control
CToolBarCtrl& GetToolBarCtrl() const;
// Implementation
public: virtual ~CToolBar(); virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz); virtual CSize CalcDynamicLayout(int nLength, DWORD nMode); virtual int OnToolHitTest(CPoint point, TOOLINFO* pTI) const; virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler); void SetOwner(CWnd* pOwnerWnd); BOOL AddReplaceBitmap(HBITMAP hbmImageWell); virtual void OnBarStyleChange(DWORD dwOldStyle, DWORD dwNewStyle);
#ifdef _DEBUG
virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif
protected: HRSRC m_hRsrcImageWell; // handle to loaded resource for image well
HINSTANCE m_hInstImageWell; // instance handle to load image well from
HBITMAP m_hbmImageWell; // contains color mapped button images
BOOL m_bDelayedButtonLayout; // used to manage when button layout should be done
CSize m_sizeImage; // current image size
CSize m_sizeButton; // current button size
CMapStringToPtr* m_pStringMap; // used as CMapStringToUInt
// implementation helpers
void _GetButton(int nIndex, TBBUTTON* pButton) const; void _SetButton(int nIndex, TBBUTTON* pButton); CSize CalcLayout(DWORD nMode, int nLength = -1); CSize CalcSize(TBBUTTON* pData, int nCount); int WrapToolBar(TBBUTTON* pData, int nCount, int nWidth); void SizeToolBar(TBBUTTON* pData, int nCount, int nLength, BOOL bVert = FALSE); #if _MFC_VER >= 0x0600
void Layout(); // called for for delayed button layout
#endif
//{{AFX_MSG(CToolBar)
afx_msg UINT OnNcHitTest(CPoint); afx_msg void OnNcPaint(); afx_msg void OnPaint(); afx_msg void OnNcCalcSize(BOOL, NCCALCSIZE_PARAMS*); afx_msg void OnWindowPosChanging(LPWINDOWPOS); afx_msg void OnSysColorChange(); afx_msg LRESULT OnSetButtonSize(WPARAM, LPARAM); afx_msg LRESULT OnSetBitmapSize(WPARAM, LPARAM); #if _MFC_VER >= 0x0600
afx_msg LRESULT OnPreserveZeroBorderHelper(WPARAM, LPARAM); #endif
afx_msg BOOL OnNcCreate(LPCREATESTRUCT); afx_msg BOOL OnEraseBkgnd(CDC* pDC); //}}AFX_MSG
DECLARE_MESSAGE_MAP()
#if _MFC_VER >= 0x0600
LRESULT OnSetSizeHelper(CSize& size, LPARAM lParam); #endif
};
// Styles for toolbar buttons
#define TBBS_BUTTON MAKELONG(TBSTYLE_BUTTON, 0) // this entry is button
#define TBBS_SEPARATOR MAKELONG(TBSTYLE_SEP, 0) // this entry is a separator
#define TBBS_CHECKBOX MAKELONG(TBSTYLE_CHECK, 0) // this is an auto check button
#define TBBS_GROUP MAKELONG(TBSTYLE_GROUP, 0) // marks the start of a group
#define TBBS_CHECKGROUP (TBBS_GROUP|TBBS_CHECKBOX) // normal use of TBBS_GROUP
#if _MFC_VER >= 0x0600
#define TBBS_DROPDOWN MAKELONG(TBSTYLE_DROPDOWN, 0) // drop down style
#define TBBS_AUTOSIZE MAKELONG(TBSTYLE_AUTOSIZE, 0) // autocalc button width
#define TBBS_NOPREFIX MAKELONG(TBSTYLE_NOPREFIX, 0) // no accel prefix for this button
#endif
// styles for display states
#define TBBS_CHECKED MAKELONG(0, TBSTATE_CHECKED) // button is checked/down
#define TBBS_PRESSED MAKELONG(0, TBSTATE_PRESSED) // button is being depressed
#define TBBS_DISABLED MAKELONG(0, TBSTATE_ENABLED) // button is disabled
#define TBBS_INDETERMINATE MAKELONG(0, TBSTATE_INDETERMINATE) // third state
#define TBBS_HIDDEN MAKELONG(0, TBSTATE_HIDDEN) // button is hidden
#define TBBS_WRAPPED MAKELONG(0, TBSTATE_WRAP) // button is wrapped at this point
#if _MFC_VER >= 0x0600
#define TBBS_ELLIPSES MAKELONG(0, TBSTATE_ELIPSES)
#define TBBS_MARKED MAKELONG(0, TBSTATE_MARKED)
#endif
////////////////////////////////////////////
// CDialogBar control
// This is a control bar built from a dialog template. It is a modeless
// dialog that delegates all control notifications to the parent window
// of the control bar [the grandparent of the control]
class CDialogBar : public CControlBar { DECLARE_DYNAMIC(CDialogBar)
// Construction
public: CDialogBar(); BOOL Create(CWnd* pParentWnd, LPCTSTR lpszTemplateName, UINT nStyle, UINT nID); BOOL Create(CWnd* pParentWnd, UINT nIDTemplate, UINT nStyle, UINT nID);
// Implementation
public: virtual ~CDialogBar(); virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz); CSize m_sizeDefault; virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
protected: #ifndef _AFX_NO_OCC_SUPPORT
// data and functions necessary for OLE control containment
_AFX_OCC_DIALOG_INFO* m_pOccDialogInfo; LPCTSTR m_lpszTemplateName; virtual BOOL SetOccDialogInfo(_AFX_OCC_DIALOG_INFO* pOccDialogInfo);
//{{AFX_MSG(CDialogBar)
DECLARE_MESSAGE_MAP() //}}AFX_MSG
afx_msg LRESULT HandleInitDialog(WPARAM, LPARAM); #endif
};
#if _MFC_VER >= 0x0600
////////////////////////////////////////////
// CReBar control
class CReBarCtrl;
class CReBar : public CControlBar { DECLARE_DYNAMIC(CReBar)
// Construction
public: CReBar(); 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);
// Attributes
public: // for direct access to the underlying common control
CReBarCtrl& GetReBarCtrl() const;
// Operations
public: BOOL AddBar(CWnd* pBar, LPCTSTR pszText = NULL, CBitmap* pbmp = NULL, DWORD dwStyle = RBBS_GRIPPERALWAYS | RBBS_FIXEDBMP); BOOL AddBar(CWnd* pBar, COLORREF clrFore, COLORREF clrBack, LPCTSTR pszText = NULL, DWORD dwStyle = RBBS_GRIPPERALWAYS);
// Implementation
virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler); virtual int OnToolHitTest(CPoint point, TOOLINFO* pTI) const; virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz); virtual CSize CalcDynamicLayout(int nLength, DWORD nMode); #ifdef _DEBUG
void EnableDocking(DWORD dwDockStyle); #endif
protected: virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); BOOL _AddBar(CWnd* pBar, REBARBANDINFO* pRBBI);
//{{AFX_MSG(CReBar)
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
DECLARE_MESSAGE_MAP() }; #endif
/////////////////////////////////////////////////////////////////////////////
// Splitter Window
#define SPLS_DYNAMIC_SPLIT 0x0001
#define SPLS_INVERT_TRACKER 0x0002 // obsolete (now ignored)
class CSplitterWnd : public CWnd { DECLARE_DYNAMIC(CSplitterWnd)
// Construction
public: CSplitterWnd(); // Create a single view type splitter with multiple splits
BOOL Create(CWnd* pParentWnd, int nMaxRows, int nMaxCols, SIZE sizeMin, CCreateContext* pContext, DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | SPLS_DYNAMIC_SPLIT, UINT nID = AFX_IDW_PANE_FIRST);
// Create a multiple view type splitter with static layout
BOOL CreateStatic(CWnd* pParentWnd, int nRows, int nCols, DWORD dwStyle = WS_CHILD | WS_VISIBLE, UINT nID = AFX_IDW_PANE_FIRST);
virtual BOOL CreateView(int row, int col, CRuntimeClass* pViewClass, SIZE sizeInit, CCreateContext* pContext);
// Attributes
public: int GetRowCount() const; int GetColumnCount() const;
// information about a specific row or column
void GetRowInfo(int row, int& cyCur, int& cyMin) const; void SetRowInfo(int row, int cyIdeal, int cyMin); void GetColumnInfo(int col, int& cxCur, int& cxMin) const; void SetColumnInfo(int col, int cxIdeal, int cxMin);
// for setting and getting shared scroll bar style
DWORD GetScrollStyle() const; void SetScrollStyle(DWORD dwStyle);
// views inside the splitter
CWnd* GetPane(int row, int col) const; BOOL IsChildPane(CWnd* pWnd, int* pRow, int* pCol); BOOL IsChildPane(CWnd* pWnd, int& row, int& col); // obsolete
int IdFromRowCol(int row, int col) const;
BOOL IsTracking(); // TRUE during split operation
// Operations
public: virtual void RecalcLayout(); // call after changing sizes
// Overridables
protected: // to customize the drawing
enum ESplitType { splitBox, splitBar, splitIntersection, splitBorder }; virtual void OnDrawSplitter(CDC* pDC, ESplitType nType, const CRect& rect); virtual void OnInvertTracker(const CRect& rect);
public: // for customizing scrollbar regions
virtual BOOL CreateScrollBarCtrl(DWORD dwStyle, UINT nID);
// for customizing DYNAMIC_SPLIT behavior
virtual void DeleteView(int row, int col); virtual BOOL SplitRow(int cyBefore); virtual BOOL SplitColumn(int cxBefore); virtual void DeleteRow(int rowDelete); virtual void DeleteColumn(int colDelete);
// determining active pane from focus or active view in frame
virtual CWnd* GetActivePane(int* pRow = NULL, int* pCol = NULL); virtual void SetActivePane(int row, int col, CWnd* pWnd = NULL); protected: CWnd* GetActivePane(int& row, int& col); // obsolete
public: // high level command operations - called by default view implementation
virtual BOOL CanActivateNext(BOOL bPrev = FALSE); virtual void ActivateNext(BOOL bPrev = FALSE); virtual BOOL DoKeyboardSplit();
// synchronized scrolling
virtual BOOL DoScroll(CView* pViewFrom, UINT nScrollCode, BOOL bDoScroll = TRUE); virtual BOOL DoScrollBy(CView* pViewFrom, CSize sizeScroll, BOOL bDoScroll = TRUE);
// Implementation
public: virtual ~CSplitterWnd(); #ifdef _DEBUG
virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif
// implementation structure
struct CRowColInfo { int nMinSize; // below that try not to show
int nIdealSize; // user set size
// variable depending on the available size layout
int nCurSize; // 0 => invisible, -1 => nonexistant
};
protected: // customizable implementation attributes (set by constructor or Create)
CRuntimeClass* m_pDynamicViewClass; int m_nMaxRows, m_nMaxCols;
// implementation attributes which control layout of the splitter
int m_cxSplitter, m_cySplitter; // size of splitter bar
int m_cxBorderShare, m_cyBorderShare; // space on either side of splitter
int m_cxSplitterGap, m_cySplitterGap; // amount of space between panes
int m_cxBorder, m_cyBorder; // borders in client area
// current state information
int m_nRows, m_nCols; BOOL m_bHasHScroll, m_bHasVScroll; CRowColInfo* m_pColInfo; CRowColInfo* m_pRowInfo;
// Tracking info - only valid when 'm_bTracking' is set
BOOL m_bTracking, m_bTracking2; CPoint m_ptTrackOffset; CRect m_rectLimit; CRect m_rectTracker, m_rectTracker2; int m_htTrack;
// implementation routines
BOOL CreateCommon(CWnd* pParentWnd, SIZE sizeMin, DWORD dwStyle, UINT nID); virtual int HitTest(CPoint pt) const; virtual void GetInsideRect(CRect& rect) const; virtual void GetHitRect(int ht, CRect& rect); virtual void TrackRowSize(int y, int row); virtual void TrackColumnSize(int x, int col); virtual void DrawAllSplitBars(CDC* pDC, int cxInside, int cyInside); virtual void SetSplitCursor(int ht); CWnd* GetSizingParent();
// starting and stopping tracking
virtual void StartTracking(int ht); virtual void StopTracking(BOOL bAccept);
// special command routing to frame
virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam); virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
//{{AFX_MSG(CSplitterWnd)
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); afx_msg void OnMouseMove(UINT nFlags, CPoint pt); afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nFlags, CPoint pt); afx_msg void OnLButtonDblClk(UINT nFlags, CPoint pt); afx_msg void OnLButtonUp(UINT nFlags, CPoint pt); afx_msg void OnCancelMode(); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt); afx_msg BOOL OnNcCreate(LPCREATESTRUCT lpcs); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnDisplayChange(); //}}AFX_MSG
DECLARE_MESSAGE_MAP() };
/////////////////////////////////////////////////////////////////////////////
// CFormView - generic view constructed from a dialog template
class CFormView : public CScrollView { DECLARE_DYNAMIC(CFormView)
// Construction
protected: // must derive your own class
CFormView(LPCTSTR lpszTemplateName); CFormView(UINT nIDTemplate);
// Implementation
public: #ifdef _DEBUG
virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif
virtual void OnInitialUpdate();
protected: LPCTSTR m_lpszTemplateName; CCreateContext* m_pCreateContext; HWND m_hWndFocus; // last window to have focus
virtual void OnDraw(CDC* pDC); // default does nothing
// special case override of child window creation
virtual BOOL Create(LPCTSTR, LPCTSTR, DWORD, const RECT&, CWnd*, UINT, CCreateContext*); virtual BOOL PreTranslateMessage(MSG* pMsg); virtual void OnActivateView(BOOL, CView*, CView*); virtual void OnActivateFrame(UINT, CFrameWnd*); BOOL SaveFocusControl(); // updates m_hWndFocus
#ifndef _AFX_NO_OCC_SUPPORT
// data and functions necessary for OLE control containment
_AFX_OCC_DIALOG_INFO* m_pOccDialogInfo; virtual BOOL SetOccDialogInfo(_AFX_OCC_DIALOG_INFO* pOccDialogInfo); afx_msg LRESULT HandleInitDialog(WPARAM, LPARAM); #endif
//{{AFX_MSG(CFormView)
afx_msg int OnCreate(LPCREATESTRUCT lpcs); afx_msg void OnSetFocus(CWnd* pOldWnd); //}}AFX_MSG
DECLARE_MESSAGE_MAP() };
/////////////////////////////////////////////////////////////////////////////
// CEditView - simple text editor view
class CEditView : public CCtrlView { DECLARE_DYNCREATE(CEditView)
// Construction
public: CEditView();
// Attributes
public: static AFX_DATA const DWORD dwStyleDefault; // CEdit control access
CEdit& GetEditCtrl() const;
// presentation attributes
CFont* GetPrinterFont() const; void SetPrinterFont(CFont* pFont); void SetTabStops(int nTabStops);
// other attributes
void GetSelectedText(CString& strResult) const;
// buffer access
LPCTSTR LockBuffer() const; void UnlockBuffer() const; UINT GetBufferLength() const;
// Operations
public: BOOL FindText(LPCTSTR lpszFind, BOOL bNext = TRUE, BOOL bCase = TRUE); void SerializeRaw(CArchive& ar); UINT PrintInsideRect(CDC* pDC, RECT& rectLayout, UINT nIndexStart, UINT nIndexStop);
// Overrideables
protected: virtual void OnFindNext(LPCTSTR lpszFind, BOOL bNext, BOOL bCase); virtual void OnReplaceSel(LPCTSTR lpszFind, BOOL bNext, BOOL bCase, LPCTSTR lpszReplace); virtual void OnReplaceAll(LPCTSTR lpszFind, LPCTSTR lpszReplace, BOOL bCase); virtual void OnTextNotFound(LPCTSTR lpszFind);
// Implementation
public: virtual ~CEditView(); #ifdef _DEBUG
virtual void AssertValid() const; virtual void Dump(CDumpContext& dc) const; #endif
virtual void Serialize(CArchive& ar); virtual void DeleteContents(); void ReadFromArchive(CArchive& ar, UINT nLen); void WriteToArchive(CArchive& ar); virtual void OnPrepareDC(CDC* pDC, CPrintInfo* pInfo);
static AFX_DATA const UINT nMaxSize; // maximum number of characters supported
protected: int m_nTabStops; // tab stops in dialog units
LPTSTR m_pShadowBuffer; // special shadow buffer only used in Win32s
UINT m_nShadowSize;
CUIntArray m_aPageStart; // array of starting pages
HFONT m_hPrinterFont; // if NULL, mirror display font
HFONT m_hMirrorFont; // font object used when mirroring
virtual BOOL PreCreateWindow(CREATESTRUCT& cs); // printing support
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo); virtual void OnPrint(CDC* pDC, CPrintInfo* pInfo); virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo = NULL); BOOL PaginateTo(CDC* pDC, CPrintInfo* pInfo);
// find & replace support
void OnEditFindReplace(BOOL bFindOnly); BOOL InitializeReplace(); BOOL SameAsSelected(LPCTSTR lpszCompare, BOOL bCase);
// special overrides for implementation
virtual void CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType = adjustBorder);
//{{AFX_MSG(CEditView)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg LRESULT OnSetFont(WPARAM wParam, LPARAM lParam); afx_msg void OnUpdateNeedSel(CCmdUI* pCmdUI); afx_msg void OnUpdateNeedClip(CCmdUI* pCmdUI); afx_msg void OnUpdateNeedText(CCmdUI* pCmdUI); afx_msg void OnUpdateNeedFind(CCmdUI* pCmdUI); afx_msg void OnUpdateEditUndo(CCmdUI* pCmdUI); afx_msg BOOL OnEditChange(); afx_msg void OnEditCut(); afx_msg void OnEditCopy(); afx_msg void OnEditPaste(); afx_msg void OnEditClear(); afx_msg void OnEditUndo(); afx_msg void OnEditSelectAll(); afx_msg void OnEditFind(); afx_msg void OnEditReplace(); afx_msg void OnEditRepeat(); afx_msg LRESULT OnFindReplaceCmd(WPARAM wParam, LPARAM lParam); afx_msg void OnDestroy(); //}}AFX_MSG
DECLARE_MESSAGE_MAP() };
/////////////////////////////////////////////////////////////////////////////
// CMetaFileDC
class CMetaFileDC : public CDC { DECLARE_DYNAMIC(CMetaFileDC)
// Constructors
public: CMetaFileDC(); BOOL Create(LPCTSTR lpszFilename = NULL); BOOL CreateEnhanced(CDC* pDCRef, LPCTSTR lpszFileName, LPCRECT lpBounds, LPCTSTR lpszDescription);
// Operations
HMETAFILE Close(); HENHMETAFILE CloseEnhanced();
// Implementation
public: virtual void SetAttribDC(HDC hDC); // Set the Attribute DC
protected: virtual void SetOutputDC(HDC hDC); // Set the Output DC -- Not allowed
virtual void ReleaseOutputDC(); // Release the Output DC -- Not allowed
public: virtual ~CMetaFileDC();
// Clipping Functions (use the Attribute DC's clip region)
virtual int GetClipBox(LPRECT lpRect) const; virtual BOOL PtVisible(int x, int y) const; BOOL PtVisible(POINT point) const; virtual BOOL RectVisible(LPCRECT lpRect) const;
// Text Functions
virtual BOOL TextOut(int x, int y, LPCTSTR lpszString, int nCount); BOOL TextOut(int x, int y, const CString& str); virtual BOOL ExtTextOut(int x, int y, UINT nOptions, LPCRECT lpRect, LPCTSTR lpszString, UINT nCount, LPINT lpDxWidths); BOOL ExtTextOut(int x, int y, UINT nOptions, LPCRECT lpRect, const CString& str, LPINT lpDxWidths); virtual CSize TabbedTextOut(int x, int y, LPCTSTR lpszString, int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin); CSize TabbedTextOut(int x, int y, const CString& str, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin); virtual int DrawText(LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat); int DrawText(const CString& str, LPRECT lpRect, UINT nFormat);
// Printer Escape Functions
virtual int Escape(int nEscape, int nCount, LPCSTR lpszInData, LPVOID lpOutData);
// Viewport Functions
virtual CPoint SetViewportOrg(int x, int y); CPoint SetViewportOrg(POINT point); virtual CPoint OffsetViewportOrg(int nWidth, int nHeight); virtual CSize SetViewportExt(int x, int y); CSize SetViewportExt(SIZE size); virtual CSize ScaleViewportExt(int xNum, int xDenom, int yNum, int yDenom);
protected: void AdjustCP(int cx); };
/////////////////////////////////////////////////////////////////////////////
// CRectTracker - simple rectangular tracking rectangle w/resize handles
class CRectTracker { public: // Constructors
CRectTracker(); CRectTracker(LPCRECT lpSrcRect, UINT nStyle);
// Style Flags
enum StyleFlags { solidLine = 1, dottedLine = 2, hatchedBorder = 4, resizeInside = 8, resizeOutside = 16, hatchInside = 32, };
// Hit-Test codes
enum TrackerHit { hitNothing = -1, hitTopLeft = 0, hitTopRight = 1, hitBottomRight = 2, hitBottomLeft = 3, hitTop = 4, hitRight = 5, hitBottom = 6, hitLeft = 7, hitMiddle = 8 };
// Attributes
UINT m_nStyle; // current state
CRect m_rect; // current position (always in pixels)
CSize m_sizeMin; // minimum X and Y size during track operation
int m_nHandleSize; // size of resize handles (default from WIN.INI)
// Operations
void Draw(CDC* pDC) const; void GetTrueRect(LPRECT lpTrueRect) const; BOOL SetCursor(CWnd* pWnd, UINT nHitTest) const; BOOL Track(CWnd* pWnd, CPoint point, BOOL bAllowInvert = FALSE, CWnd* pWndClipTo = NULL); BOOL TrackRubberBand(CWnd* pWnd, CPoint point, BOOL bAllowInvert = TRUE); int HitTest(CPoint point) const; int NormalizeHit(int nHandle) const;
// Overridables
virtual void DrawTrackerRect(LPCRECT lpRect, CWnd* pWndClipTo, CDC* pDC, CWnd* pWnd); virtual void AdjustRect(int nHandle, LPRECT lpRect); virtual void OnChangedRect(const CRect& rectOld); virtual UINT GetHandleMask() const;
// Implementation
public: virtual ~CRectTracker();
protected: BOOL m_bAllowInvert; // flag passed to Track or TrackRubberBand
CRect m_rectLast; CSize m_sizeLast; BOOL m_bErase; // TRUE if DrawTrackerRect is called for erasing
BOOL m_bFinalErase; // TRUE if DragTrackerRect called for final erase
// implementation helpers
int HitTestHandles(CPoint point) const; void GetHandleRect(int nHandle, CRect* pHandleRect) const; void GetModifyPointers(int nHandle, int**ppx, int**ppy, int* px, int*py); virtual int GetHandleSize(LPCRECT lpRect = NULL) const; BOOL TrackHandle(int nHandle, CWnd* pWnd, CPoint point, CWnd* pWndClipTo); void Construct(); };
/////////////////////////////////////////////////////////////////////////////
// Informational data structures
struct CPrintInfo // Printing information structure
{ CPrintInfo(); ~CPrintInfo();
CPrintDialog* m_pPD; // pointer to print dialog
BOOL m_bDocObject; // TRUE if printing by IPrint interface
BOOL m_bPreview; // TRUE if in preview mode
BOOL m_bDirect; // TRUE if bypassing Print Dialog
BOOL m_bContinuePrinting;// set to FALSE to prematurely end printing
UINT m_nCurPage; // Current page
UINT m_nNumPreviewPages; // Desired number of preview pages
CString m_strPageDesc; // Format string for page number display
LPVOID m_lpUserData; // pointer to user created struct
CRect m_rectDraw; // rectangle defining current usable page area
// these only valid if m_bDocObject
UINT m_nOffsetPage; // offset of first page in combined IPrint job
DWORD m_dwFlags; // flags passed to IPrint::Print
void SetMinPage(UINT nMinPage); void SetMaxPage(UINT nMaxPage); UINT GetMinPage() const; UINT GetMaxPage() const; UINT GetFromPage() const; UINT GetToPage() const; UINT GetOffsetPage() const; };
struct CPrintPreviewState // Print Preview context/state
{ UINT nIDMainPane; // main pane ID to hide
HMENU hMenu; // saved hMenu
DWORD dwStates; // Control Bar Visible states (bit map)
CView* pViewActiveOld; // save old active view during preview
BOOL (CALLBACK* lpfnCloseProc)(CFrameWnd* pFrameWnd); HACCEL hAccelTable; // saved accelerator table
// Implementation
CPrintPreviewState(); };
struct CCreateContext // Creation information structure
// All fields are optional and may be NULL
{ // for creating new views
CRuntimeClass* m_pNewViewClass; // runtime class of view to create or NULL
CDocument* m_pCurrentDoc;
// for creating MDI children (CMDIChildWnd::LoadFrame)
CDocTemplate* m_pNewDocTemplate;
// for sharing view/frame state from the original view/frame
CView* m_pLastView; CFrameWnd* m_pCurrentFrame;
// Implementation
CCreateContext(); };
/////////////////////////////////////////////////////////////////////////////
// Inline function declarations
#ifdef _AFX_PACKING
#pragma pack(pop)
#endif
#ifdef _AFX_ENABLE_INLINES
#define _AFXEXT_INLINE AFX_INLINE
#include <afxext.inl>
#endif
#undef AFX_DATA
#define AFX_DATA
#ifdef _AFX_MINREBUILD
#pragma component(minrebuild, on)
#endif
#ifndef _AFX_FULLTYPEINFO
#pragma component(mintypeinfo, off)
#endif
#endif //__AFXEXT_H__
/////////////////////////////////////////////////////////////////////////////
|