ruler.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:6k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // riched.h : header file
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #ifndef __RULER_H__
  21. #define __RULER_H__
  22. class CWordPadView;
  23. class CWordPadDoc;
  24. class CRulerBar;
  25. // ruler items include left margin, right margin, indent, and tabs
  26. // horz positions in twips -- necessary to avoid rounding errors
  27. // vertical position in pixels
  28. class CRulerItem
  29. {
  30. public:
  31. CRulerItem(UINT nBitmapID = 0);
  32. ~CRulerItem();
  33. virtual BOOL HitTestPix(CPoint pt) { return GetHitRectPix().PtInRect(pt); }
  34. virtual void Draw(CDC& dc);
  35. virtual void SetHorzPosTwips(int nXPos);
  36. virtual void TrackHorzPosTwips(int nXPos, BOOL bOnRuler = TRUE);
  37. virtual void SetVertPos(int nYPos) { m_nYPosPix = nYPos; }
  38. virtual void SetAlignment(int nAlign) {m_nAlignment = nAlign;}
  39. virtual void SetRuler(CRulerBar* pRuler) {m_pRuler = pRuler;}
  40. virtual void SetBounds(int nMin, int nMax) { m_nMin = nMin; m_nMax = nMax; }
  41. int GetMin() { return m_nMin;}
  42. int GetMax() { return m_nMax;}
  43. void Invalidate();
  44. int GetVertPosPix() { return m_nYPosPix;}
  45. int GetHorzPosTwips() { return m_nXPosTwips;}
  46. int GetHorzPosPix();
  47. CRect GetHitRectPix();
  48. void DrawFocusLine();
  49. void SetTrack(BOOL b);
  50. HBITMAP m_hbm;
  51. HBITMAP m_hbmMask;
  52. CSize m_size;   // size of item in pixels
  53. // Operations
  54. BOOL LoadMaskedBitmap(LPCTSTR lpszResourceName);
  55. protected:
  56. int m_nYPosPix;
  57. int m_nXPosTwips;
  58. int m_nAlignment;
  59. BOOL m_bTrack;
  60. CRulerBar* m_pRuler;
  61. CRect m_rcTrack;
  62. CDC* m_pDC; // dc used for drawing tracking line
  63. int m_nMin, m_nMax;
  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. class CTabRulerItem : public CRulerItem
  85. {
  86. public:
  87. CTabRulerItem() { SetAlignment(TA_LEFT); }
  88. virtual void Draw(CDC& dc) {if (GetHorzPosTwips() != 0) CRulerItem::Draw(dc);}
  89. virtual void TrackHorzPosTwips(int nXPos, BOOL bOnRuler = TRUE);
  90. virtual BOOL HitTestPix(CPoint pt) { return (GetHorzPosTwips() != 0) ? CRulerItem::HitTestPix(pt) : FALSE;}
  91. };
  92. /////////////////////////////////////////////////////////////////////////////
  93. // CRulerBar
  94. class CRulerBar : public CControlBar
  95. {
  96. // Construction
  97. public:
  98. CRulerBar(BOOL b3DExt = TRUE);
  99. ~CRulerBar();
  100. // Operations
  101. public:
  102. virtual BOOL Create(CWnd* pParentWnd, DWORD dwStyle, UINT nID);
  103. protected:
  104. void Update(const PARAFORMAT& pf);
  105. void Update(CSize sizePaper, const CRect& rectMargins);
  106. // Attributes
  107. public:
  108. BOOL m_bDeferInProgress;
  109. BOOL m_bDraw3DExt;
  110. CUnit m_unit;
  111. CRulerItem* m_pSelItem;
  112. CFont fnt;
  113. CSize GetBaseUnits();
  114. CComboRulerItem m_leftmargin;
  115. CRulerItem m_indent;
  116. CRulerItem m_rightmargin;
  117. CRulerItem m_tabItem;
  118. CTabRulerItem m_pTabItems[MAX_TAB_STOPS];
  119. CSize m_sizePaper;
  120. CRect m_rectMargin;
  121. int PrintWidth() {return m_sizePaper.cx - m_rectMargin.left -
  122. m_rectMargin.right;}
  123. int m_nTabs;
  124. int m_logx;
  125. int m_nLinePos;
  126. int m_nScroll; // in pixels
  127. CPen penFocusLine;
  128. CPen penBtnHighLight;
  129. CPen penBtnShadow;
  130. CPen penWindowFrame;
  131. CPen penBtnText;
  132. CPen penBtnFace;
  133. CPen penWindowText;
  134. CPen penWindow;
  135. CBrush brushWindow;
  136. CBrush brushBtnFace;
  137. COLORREF m_clrFace;
  138. // Implementation
  139. public:
  140. virtual void DoPaint(CDC* pDC);
  141. virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz);
  142. void ClientToRuler(CPoint& pt) {pt.Offset(-m_cxLeftBorder+m_nScroll, -m_cyTopBorder);}
  143. void ClientToRuler(CRect& rect) {rect.OffsetRect(-m_cxLeftBorder+m_nScroll, -m_cyTopBorder);}
  144. void RulerToClient(CPoint& pt) {pt.Offset(m_cxLeftBorder-m_nScroll, m_cyTopBorder);}
  145. void RulerToClient(CRect& rect) {rect.OffsetRect(m_cxLeftBorder-m_nScroll, m_cyTopBorder);}
  146. int XTwipsToClient(int nT) {return MulDiv(nT, m_logx, 1440) + m_cxLeftBorder - m_nScroll;}
  147. int XClientToTwips(int nC) {return MulDiv(nC - m_cxLeftBorder + m_nScroll, 1440, m_logx);}
  148. int XTwipsToRuler(int nT) {return MulDiv(nT, m_logx, 1440);}
  149. int XRulerToTwips(int nR) {return MulDiv(nR, 1440, m_logx);}
  150. int XRulerToClient(int nR) {return nR + m_cxLeftBorder - m_nScroll;}
  151. int XClientToRuler(int nC) {return nC - m_cxLeftBorder + m_nScroll;}
  152. protected:
  153. virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
  154. void CreateGDIObjects();
  155. void DrawFace(CDC& dc);
  156. void DrawTickMarks(CDC& dC);
  157. void DrawNumbers(CDC& dc, int nInc, int nTPU);
  158. void DrawDiv(CDC& dc, int nInc, int nLargeDiv, int nLength);
  159. void DrawTabs(CDC& dc);
  160. void FillInParaFormat(PARAFORMAT& pf);
  161. void SortTabs();
  162. void SetMarginBounds();
  163. CRulerItem* GetFreeTab();
  164. CView* GetView()
  165. {
  166. ASSERT(GetParent() != NULL);
  167. return ((CFrameWnd*)GetParent())->GetActiveView();
  168. }
  169. CDocument* GetDocument() { return GetView()->GetDocument(); }
  170. CTabRulerItem* GetHitTabPix(CPoint pt);
  171. // Generated message map functions
  172. //{{AFX_MSG(CRulerBar)
  173. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  174. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  175. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  176. afx_msg void OnSysColorChange();
  177. afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
  178. afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
  179. afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
  180. //}}AFX_MSG
  181. afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam);
  182. DECLARE_MESSAGE_MAP()
  183. friend class CRulerItem;
  184. };
  185. inline int CRulerItem::GetHorzPosPix()
  186. { return m_pRuler->XTwipsToRuler(m_nXPosTwips); }
  187. #endif