diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /public/sdk/inc/mfc40/afxext.h | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'public/sdk/inc/mfc40/afxext.h')
-rw-r--r-- | public/sdk/inc/mfc40/afxext.h | 1038 |
1 files changed, 1038 insertions, 0 deletions
diff --git a/public/sdk/inc/mfc40/afxext.h b/public/sdk/inc/mfc40/afxext.h new file mode 100644 index 000000000..49433a88c --- /dev/null +++ b/public/sdk/inc/mfc40/afxext.h @@ -0,0 +1,1038 @@ +// This is a part of the Microsoft Foundation Classes C++ library. +// Copyright (C) 1992-1995 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 + + 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 + +class CControlBar : public CWnd +{ + 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; + + 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. +#ifdef _MAC + BOOL m_bMonochrome; // whether to draw in monochrome or color +#endif + + // 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); + + // 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(); + +#ifdef _MAC + void OnReposition(); + BOOL CheckMonochrome(); +#endif + void GetBarInfo(CControlBarInfo* pInfo); + void SetBarInfo(CControlBarInfo* pInfo, CFrameWnd* pFrameWnd); + + //{{AFX_MSG(CControlBar) + afx_msg void OnTimer(UINT 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 +#ifdef _MAC + afx_msg void OnSize(UINT nType, int cx, int cy); + afx_msg LRESULT OnMacintosh(WPARAM wParam, LPARAM lParam); + afx_msg void OnSysColorChange(); + afx_msg void OnMove(int x, int y); + afx_msg BOOL OnEraseBkgnd(CDC* pDC); +#endif + 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); + BOOL SetIndicators(const UINT* lpIDArray, int nIDCount); + +// Attributes +public: + // 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); + + 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); + + //{{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); + afx_msg BOOL OnNcCreate(LPCREATESTRUCT); + afx_msg BOOL OnEraseBkgnd(CDC* pDC); + //}}AFX_MSG + DECLARE_MESSAGE_MAP() +}; + +// 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 + +// 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 + +//////////////////////////////////////////// +// 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 LRESULT HandleInitDialog(WPARAM, LPARAM); + 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(); + + // syncronized 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); + int HitTest(CPoint pt) const; + void GetInsideRect(CRect& rect) const; + void GetHitRect(int ht, CRect& rect); + void TrackRowSize(int y, int row); + void TrackColumnSize(int x, int col); + void DrawAllSplitBars(CDC* pDC, int cxInside, int cyInside); + 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 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); +#ifndef _MAC + void SetTabStops(int nTabStops); +#endif + + // 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: +#ifndef _MAC + int m_nTabStops; // tab stops in dialog units +#endif + 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); +#ifndef _MAC + BOOL CreateEnhanced(CDC* pDCRef, LPCTSTR lpszFileName, + LPCRECT lpBounds, LPCTSTR lpszDescription); +#endif + +// Operations + HMETAFILE Close(); +#ifndef _MAC + HENHMETAFILE CloseEnhanced(); +#endif + +// 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_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 + + void SetMinPage(UINT nMinPage); + void SetMaxPage(UINT nMaxPage); + UINT GetMinPage() const; + UINT GetMaxPage() const; + UINT GetFromPage() const; + UINT GetToPage() 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 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__ + +///////////////////////////////////////////////////////////////////////////// |