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

对话框与窗口

开发平台:

Visual C++

  1. // ToolTipContextView.cpp : implementation of the CToolTipContextView class
  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. #include "stdafx.h"
  21. #include "ToolTipContext.h"
  22. #include "ToolTipContextDoc.h"
  23. #include "ToolTipContextView.h"
  24. #ifdef _DEBUG
  25. #define new DEBUG_NEW
  26. #undef THIS_FILE
  27. static char THIS_FILE[] = __FILE__;
  28. #endif
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CToolTipContextView
  31. IMPLEMENT_DYNCREATE(CToolTipContextView, CView)
  32. BEGIN_MESSAGE_MAP(CToolTipContextView, CView)
  33. //{{AFX_MSG_MAP(CToolTipContextView)
  34. ON_WM_RBUTTONDOWN()
  35. ON_WM_ERASEBKGND()
  36. ON_WM_PAINT()
  37. //}}AFX_MSG_MAP
  38. // Standard printing commands
  39. ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
  40. ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
  41. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
  42. END_MESSAGE_MAP()
  43. /////////////////////////////////////////////////////////////////////////////
  44. // CToolTipContextView construction/destruction
  45. CToolTipContextView::CToolTipContextView()
  46. {
  47. m_pTooltipContext = new CXTPToolTipContext();
  48. #ifdef _HTML
  49. m_pTooltipContext->SetStyle(xtpToolTipHTML);
  50. #else
  51. m_pTooltipContext->SetStyle(xtpToolTipMarkup);
  52. #endif
  53. m_pTooltipContext->SetTipBkColor(0xFFFFFF);
  54. m_pTooltipContext->SetMargin(CRect(-3, -3, -3, -3));
  55. }
  56. CToolTipContextView::~CToolTipContextView()
  57. {
  58. for (int i = 0; i < m_arrCircles.GetSize(); i++)
  59. {
  60. delete m_arrCircles[i];
  61. }
  62. m_arrCircles.RemoveAll();
  63. delete m_pTooltipContext;
  64. }
  65. BOOL CToolTipContextView::PreCreateWindow(CREATESTRUCT& cs)
  66. {
  67. // TODO: Modify the Window class or styles here by modifying
  68. //  the CREATESTRUCT cs
  69. return CView::PreCreateWindow(cs);
  70. }
  71. /////////////////////////////////////////////////////////////////////////////
  72. // CToolTipContextView drawing
  73. void CToolTipContextView::OnDraw(CDC* pDC)
  74. {
  75. for (int i = 0; i < (int)m_arrCircles.GetSize(); i++)
  76. {
  77. m_arrCircles[i]->Draw(pDC);
  78. }
  79. }
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CToolTipContextView printing
  82. BOOL CToolTipContextView::OnPreparePrinting(CPrintInfo* pInfo)
  83. {
  84. // default preparation
  85. return DoPreparePrinting(pInfo);
  86. }
  87. void CToolTipContextView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  88. {
  89. // TODO: add extra initialization before printing
  90. }
  91. void CToolTipContextView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  92. {
  93. // TODO: add cleanup after printing
  94. }
  95. /////////////////////////////////////////////////////////////////////////////
  96. // CToolTipContextView diagnostics
  97. #ifdef _DEBUG
  98. void CToolTipContextView::AssertValid() const
  99. {
  100. CView::AssertValid();
  101. }
  102. void CToolTipContextView::Dump(CDumpContext& dc) const
  103. {
  104. CView::Dump(dc);
  105. }
  106. CToolTipContextDoc* CToolTipContextView::GetDocument() // non-debug version is inline
  107. {
  108. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CToolTipContextDoc)));
  109. return (CToolTipContextDoc*)m_pDocument;
  110. }
  111. #endif //_DEBUG
  112. /////////////////////////////////////////////////////////////////////////////
  113. // CToolTipContextView message handlers
  114. void CToolTipContextView::OnRButtonDown(UINT /*nFlags*/, CPoint point) 
  115. {
  116. ClientToScreen(&point);
  117. ((CXTPMDIFrameWnd*)AfxGetMainWnd())->GetCommandBars()->
  118. TrackPopupMenu(IDR_CONTEXT_MENU, TPM_RIGHTBUTTON , point.x, point.y);
  119. }
  120. BOOL CToolTipContextView::OnEraseBkgnd(CDC* /*pDC*/) 
  121. {
  122. return TRUE;
  123. }
  124. void CToolTipContextView::OnPaint() 
  125. {
  126. CPaintDC dcPaint(this); // device context for painting
  127. CXTPBufferDC dc(dcPaint);
  128. dc.FillSolidRect(CXTPClientRect(this), GetSysColor(COLOR_WINDOW));
  129. OnDraw(&dc);
  130. }
  131. void CToolTipContextView::OnInitialUpdate() 
  132. {
  133. CView::OnInitialUpdate();
  134. CXTPClientRect rc(this);
  135. for (int i = 0; i < 8; i++)
  136. {
  137. CPoint ptCenter(rand() % rc.Width(), rand() % rc.Height());
  138. int nRadius = 20 + rand() % 200;
  139. COLORREF clr = CXTPTabPaintManager::GetOneNoteColor((XTPTabOneNoteColor)(xtpTabColorBlue + i));
  140. CCircle* pCircle = new CCircle(ptCenter, nRadius, clr);
  141. m_arrCircles.Add(pCircle);
  142. }
  143. }
  144. CCircle* CToolTipContextView::HitTest(const CPoint& Point) const
  145. {
  146.      for (int n = (int)m_arrCircles.GetSize() - 1; n >= 0; n--)
  147.      {
  148.          if (m_arrCircles[n]->HitTest(Point))
  149.          {
  150.              return m_arrCircles[n];
  151.          }
  152.      }
  153.      return NULL;
  154.  }
  155. BOOL CToolTipContextView::PreTranslateMessage(MSG* pMsg) 
  156. {
  157. m_pTooltipContext->FilterToolTipMessage(this, pMsg);
  158. return CView::PreTranslateMessage(pMsg);
  159. }
  160. CString ColorToHtml(COLORREF clr)
  161. {
  162. CString str;
  163. str.Format(_T("#%0.2x%0.2x%0.2x"), GetRValue(clr), GetGValue(clr), GetBValue(clr));
  164. return str;
  165. }
  166. CString CCircle::GetTooltip()
  167. {
  168. CString strCenter; strCenter.Format(_T("(%i, %i)"), m_ptCenter.x, m_ptCenter.y);
  169. CString strRadius; strRadius.Format(_T("%i"), m_nRadius);
  170. CString strColor; strColor.Format(_T("(%i, %i, %i)"), GetRValue(m_clr), GetGValue(m_clr), GetBValue(m_clr));
  171. CString strHTML;
  172. #ifdef _HTML
  173. strHTML.Format(
  174. _T("<table cellpadding=4 cellspacing=0 border=1 bordercolor=#808080>")
  175. _T("<tr><td bgColor=#e0e0e0>Center:</td><td>%s</td></tr>")
  176. _T("<tr><td bgColor=#e0e0e0>Radius:</td><td>%s</td></tr>")
  177. _T("<tr><td bgColor=#e0e0e0>Color:</td><td bgcolor=%s>%s</td></tr></table>"), 
  178. (LPCTSTR)strCenter, (LPCTSTR)strRadius, (LPCTSTR)ColorToHtml(m_clr), (LPCTSTR)strColor);
  179. #else
  180. strHTML.Format(
  181. _T("<Border BorderThickness='1' BorderBrush='#808080'>")
  182. _T("<Grid>")
  183. _T("<Grid.ColumnDefinitions><ColumnDefinition Width='Auto'/><ColumnDefinition Width='Auto'/></Grid.ColumnDefinitions>")
  184. _T("<Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions>")
  185. _T("<Border Padding='3' Grid.Column='0' Grid.Row='0' BorderThickness='1' Background='#e0e0e0' BorderBrush='#808080'><TextBlock Text='Center:'/></Border>")
  186. _T("<Border Padding='3' Grid.Column='0' Grid.Row='1' BorderThickness='1' Background='#e0e0e0' BorderBrush='#808080'><TextBlock Text='Radius:'/></Border>")
  187. _T("<Border Padding='3' Grid.Column='0' Grid.Row='2' BorderThickness='1' Background='#e0e0e0' BorderBrush='#808080'><TextBlock Text='Color:'/></Border>")
  188. _T("<Border Padding='3' Grid.Column='1' Grid.Row='0' BorderThickness='1' Background='White' BorderBrush='#808080'><TextBlock Text='%s'/></Border>")
  189. _T("<Border Padding='3' Grid.Column='2' Grid.Row='1' BorderThickness='1' Background='White' BorderBrush='#808080'><TextBlock Text='%s'/></Border>")
  190. _T("<Border Padding='3' Grid.Column='3' Grid.Row='2' BorderThickness='1' Background='%s' BorderBrush='#808080'><TextBlock Text='%s'/></Border>")
  191. _T("</Grid>")
  192. _T("</Border>"),
  193. (LPCTSTR)strCenter, (LPCTSTR)strRadius, (LPCTSTR)ColorToHtml(m_clr), (LPCTSTR)strColor);
  194. #endif
  195. return strHTML;
  196. }
  197. INT_PTR CToolTipContextView::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
  198. {
  199. ASSERT_VALID(this);
  200. ASSERT(::IsWindow(m_hWnd));
  201. // check child windows first by calling CControlBar
  202. INT_PTR nHit = CWnd::OnToolHitTest(point, pTI);
  203. if (nHit != -1)
  204. return nHit;
  205. CCircle* pCircle = HitTest(point);
  206. if (pCircle)
  207. {
  208. nHit = (INT_PTR)pCircle;
  209. CString strTip = pCircle->GetTooltip();
  210. if (strTip.GetLength() == 0)
  211. return -1;
  212. CXTPToolTipContext::FillInToolInfo(pTI, m_hWnd, pCircle->GetRect(),
  213. nHit, strTip);
  214. return nHit;
  215. }
  216. return -1;
  217. }