RULER.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

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