home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / ole / wordpad / ruler.h < prev    next >
C/C++ Source or Header  |  1998-03-26  |  6KB  |  203 lines

  1. // riched.h : header file
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13. #ifndef __RULER_H__
  14. #define __RULER_H__
  15.  
  16. class CWordPadView;
  17. class CWordPadDoc;
  18. class CRulerBar;
  19.  
  20. // ruler items include left margin, right margin, indent, and tabs
  21.  
  22. // horz positions in twips -- necessary to avoid rounding errors
  23. // vertical position in pixels
  24. class CRulerItem
  25. {
  26. public:
  27.     CRulerItem(UINT nBitmapID = 0);
  28.     ~CRulerItem();
  29.     virtual BOOL HitTestPix(CPoint pt) { return GetHitRectPix().PtInRect(pt); }
  30.     virtual void Draw(CDC& dc);
  31.     virtual void SetHorzPosTwips(int nXPos);
  32.     virtual void TrackHorzPosTwips(int nXPos, BOOL bOnRuler = TRUE);
  33.     virtual void SetVertPos(int nYPos) { m_nYPosPix = nYPos; }
  34.     virtual void SetAlignment(int nAlign) {m_nAlignment = nAlign;}
  35.     virtual void SetRuler(CRulerBar* pRuler) {m_pRuler = pRuler;}
  36.     virtual void SetBounds(int nMin, int nMax) { m_nMin = nMin; m_nMax = nMax; }
  37.     int GetMin() { return m_nMin;}
  38.     int GetMax() { return m_nMax;}
  39.     void Invalidate();
  40.     int GetVertPosPix() { return m_nYPosPix;}
  41.     int GetHorzPosTwips() { return m_nXPosTwips;}
  42.     int GetHorzPosPix();
  43.     CRect GetHitRectPix();
  44.     void DrawFocusLine();
  45.     void SetTrack(BOOL b);
  46.  
  47.     HBITMAP m_hbm;
  48.     HBITMAP m_hbmMask;
  49.     CSize m_size;   // size of item in pixels
  50.  
  51. // Operations
  52.     BOOL LoadMaskedBitmap(LPCTSTR lpszResourceName);
  53.  
  54. protected:
  55.     int m_nYPosPix;
  56.     int m_nXPosTwips;
  57.     int m_nAlignment;
  58.     BOOL m_bTrack;
  59.     CRulerBar* m_pRuler;
  60.     CRect m_rcTrack;
  61.     CDC* m_pDC; // dc used for drawing tracking line
  62.     int m_nMin, m_nMax;
  63. };
  64.  
  65. class CComboRulerItem : public CRulerItem
  66. {
  67. public:
  68.     CComboRulerItem(UINT nBitmapID1, UINT nBitmapID2, CRulerItem& item);
  69.     virtual BOOL HitTestPix(CPoint pt);
  70.     virtual void Draw(CDC& dc);
  71.     virtual void SetHorzPosTwips(int nXPos);
  72.     virtual void TrackHorzPosTwips(int nXPos, BOOL bOnRuler = TRUE);
  73.     virtual void SetVertPos(int nYPos);
  74.     virtual void SetAlignment(int nAlign);
  75.     virtual void SetRuler(CRulerBar* pRuler);
  76.     virtual void SetBounds(int nMin, int nMax);
  77.     int GetMin();
  78.     int GetMax();
  79. protected:
  80.     CRulerItem m_secondary;
  81.     CRulerItem& m_link;
  82.     BOOL m_bHitPrimary;
  83. };
  84.  
  85. class CTabRulerItem : public CRulerItem
  86. {
  87. public:
  88.     CTabRulerItem() { SetAlignment(TA_LEFT); }
  89.     virtual void Draw(CDC& dc) {if (GetHorzPosTwips() != 0) CRulerItem::Draw(dc);}
  90.     virtual void TrackHorzPosTwips(int nXPos, BOOL bOnRuler = TRUE);
  91.     virtual BOOL HitTestPix(CPoint pt) { return (GetHorzPosTwips() != 0) ? CRulerItem::HitTestPix(pt) : FALSE;}
  92. };
  93.  
  94. /////////////////////////////////////////////////////////////////////////////
  95. // CRulerBar
  96.  
  97. class CRulerBar : public CControlBar
  98. {
  99. // Construction
  100. public:
  101.     CRulerBar(BOOL b3DExt = TRUE);
  102.     ~CRulerBar();
  103.  
  104. // Operations
  105. public:
  106.     virtual BOOL Create(CWnd* pParentWnd, DWORD dwStyle, UINT nID);
  107. protected:
  108.     void Update(const PARAFORMAT& pf);
  109.     void Update(CSize sizePaper, const CRect& rectMargins);
  110.  
  111. // Attributes
  112. public:
  113.     BOOL m_bDeferInProgress;
  114.     BOOL m_bDraw3DExt;
  115.     CUnit m_unit;
  116.     CRulerItem* m_pSelItem;
  117.     CFont fnt;
  118.     CSize GetBaseUnits();
  119.     CComboRulerItem m_leftmargin;
  120.     CRulerItem m_indent;
  121.     CRulerItem m_rightmargin;
  122.     CRulerItem m_tabItem;
  123.     CTabRulerItem m_pTabItems[MAX_TAB_STOPS];
  124.     CSize m_sizePaper;
  125.     CRect m_rectMargin;
  126.     int PrintWidth() {return m_sizePaper.cx - m_rectMargin.left -
  127.         m_rectMargin.right;}
  128.     int m_nTabs;
  129.     int m_logx;
  130.     int m_nLinePos;
  131.     int m_nScroll; // in pixels
  132.  
  133.     CPen penFocusLine;
  134.     CPen penBtnHighLight;
  135.     CPen penBtnShadow;
  136.     CPen penWindowFrame;
  137.     CPen penBtnText;
  138.     CPen penBtnFace;
  139.     CPen penWindowText;
  140.     CPen penWindow;
  141.     CBrush brushWindow;
  142.     CBrush brushBtnFace;
  143.  
  144. // Implementation
  145. public:
  146.     virtual void DoPaint(CDC* pDC);
  147.     virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
  148.     void ClientToRuler(CPoint& pt) {pt.Offset(-m_cxLeftBorder+m_nScroll, -m_cyTopBorder);}
  149.     void ClientToRuler(CRect& rect) {rect.OffsetRect(-m_cxLeftBorder+m_nScroll, -m_cyTopBorder);}
  150.     void RulerToClient(CPoint& pt) {pt.Offset(m_cxLeftBorder-m_nScroll, m_cyTopBorder);}
  151.     void RulerToClient(CRect& rect) {rect.OffsetRect(m_cxLeftBorder-m_nScroll, m_cyTopBorder);}
  152.  
  153.     int XTwipsToClient(int nT) {return MulDiv(nT, m_logx, 1440) + m_cxLeftBorder - m_nScroll;}
  154.     int XClientToTwips(int nC) {return MulDiv(nC - m_cxLeftBorder + m_nScroll, 1440, m_logx);}
  155.  
  156.     int XTwipsToRuler(int nT) {return MulDiv(nT, m_logx, 1440);}
  157.     int XRulerToTwips(int nR) {return MulDiv(nR, 1440, m_logx);}
  158.  
  159.     int XRulerToClient(int nR) {return nR + m_cxLeftBorder - m_nScroll;}
  160.     int XClientToRuler(int nC) {return nC - m_cxLeftBorder + m_nScroll;}
  161.  
  162. protected:
  163.     virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
  164.     void CreateGDIObjects();
  165.     void DrawFace(CDC& dc);
  166.     void DrawTickMarks(CDC& dC);
  167.     void DrawNumbers(CDC& dc, int nInc, int nTPU);
  168.     void DrawDiv(CDC& dc, int nInc, int nLargeDiv, int nLength);
  169.     void DrawTabs(CDC& dc);
  170.     void FillInParaFormat(PARAFORMAT& pf);
  171.     void SortTabs();
  172.     void SetMarginBounds();
  173.     CRulerItem* GetFreeTab();
  174.     CView* GetView()
  175.     {
  176.         ASSERT(GetParent() != NULL);
  177.         return ((CFrameWnd*)GetParent())->GetActiveView();
  178.     }
  179.     CDocument* GetDocument() { return GetView()->GetDocument(); }
  180.  
  181.     CTabRulerItem* GetHitTabPix(CPoint pt);
  182.  
  183.     // Generated message map functions
  184.     //{{AFX_MSG(CRulerBar)
  185.     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  186.     afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  187.     afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  188.     afx_msg void OnSysColorChange();
  189.     afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
  190.     afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
  191.     afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  192.     //}}AFX_MSG
  193.     afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam);
  194.     DECLARE_MESSAGE_MAP()
  195.  
  196.     friend class CRulerItem;
  197. };
  198.  
  199. inline int CRulerItem::GetHorzPosPix()
  200.     { return m_pRuler->XTwipsToRuler(m_nXPosTwips); }
  201.  
  202. #endif
  203.