DragonNest/Third/XTToolkitPro/Samples/CommandBars/ToolTipContext/ToolTipContextView.cpp
2024-12-19 09:48:26 +08:00

268 lines
No EOL
7.7 KiB
C++

// ToolTipContextView.cpp : implementation of the CToolTipContextView class
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2008 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ToolTipContext.h"
#include "ToolTipContextDoc.h"
#include "ToolTipContextView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CToolTipContextView
IMPLEMENT_DYNCREATE(CToolTipContextView, CView)
BEGIN_MESSAGE_MAP(CToolTipContextView, CView)
//{{AFX_MSG_MAP(CToolTipContextView)
ON_WM_RBUTTONDOWN()
ON_WM_ERASEBKGND()
ON_WM_PAINT()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CToolTipContextView construction/destruction
CToolTipContextView::CToolTipContextView()
{
m_pTooltipContext = new CXTPToolTipContext();
#ifdef _HTML
m_pTooltipContext->SetStyle(xtpToolTipHTML);
#else
m_pTooltipContext->SetStyle(xtpToolTipMarkup);
#endif
m_pTooltipContext->SetTipBkColor(0xFFFFFF);
m_pTooltipContext->SetMargin(CRect(-3, -3, -3, -3));
}
CToolTipContextView::~CToolTipContextView()
{
for (int i = 0; i < m_arrCircles.GetSize(); i++)
{
delete m_arrCircles[i];
}
m_arrCircles.RemoveAll();
delete m_pTooltipContext;
}
BOOL CToolTipContextView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CToolTipContextView drawing
void CToolTipContextView::OnDraw(CDC* pDC)
{
for (int i = 0; i < (int)m_arrCircles.GetSize(); i++)
{
m_arrCircles[i]->Draw(pDC);
}
}
/////////////////////////////////////////////////////////////////////////////
// CToolTipContextView printing
BOOL CToolTipContextView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CToolTipContextView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CToolTipContextView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CToolTipContextView diagnostics
#ifdef _DEBUG
void CToolTipContextView::AssertValid() const
{
CView::AssertValid();
}
void CToolTipContextView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CToolTipContextDoc* CToolTipContextView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CToolTipContextDoc)));
return (CToolTipContextDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CToolTipContextView message handlers
void CToolTipContextView::OnRButtonDown(UINT /*nFlags*/, CPoint point)
{
ClientToScreen(&point);
((CXTPMDIFrameWnd*)AfxGetMainWnd())->GetCommandBars()->
TrackPopupMenu(IDR_CONTEXT_MENU, TPM_RIGHTBUTTON , point.x, point.y);
}
BOOL CToolTipContextView::OnEraseBkgnd(CDC* /*pDC*/)
{
return TRUE;
}
void CToolTipContextView::OnPaint()
{
CPaintDC dcPaint(this); // device context for painting
CXTPBufferDC dc(dcPaint);
dc.FillSolidRect(CXTPClientRect(this), GetSysColor(COLOR_WINDOW));
OnDraw(&dc);
}
void CToolTipContextView::OnInitialUpdate()
{
CView::OnInitialUpdate();
CXTPClientRect rc(this);
for (int i = 0; i < 8; i++)
{
CPoint ptCenter(rand() % rc.Width(), rand() % rc.Height());
int nRadius = 20 + rand() % 200;
COLORREF clr = CXTPTabPaintManager::GetOneNoteColor((XTPTabOneNoteColor)(xtpTabColorBlue + i));
CCircle* pCircle = new CCircle(ptCenter, nRadius, clr);
m_arrCircles.Add(pCircle);
}
}
CCircle* CToolTipContextView::HitTest(const CPoint& Point) const
{
for (int n = (int)m_arrCircles.GetSize() - 1; n >= 0; n--)
{
if (m_arrCircles[n]->HitTest(Point))
{
return m_arrCircles[n];
}
}
return NULL;
}
BOOL CToolTipContextView::PreTranslateMessage(MSG* pMsg)
{
m_pTooltipContext->FilterToolTipMessage(this, pMsg);
return CView::PreTranslateMessage(pMsg);
}
CString ColorToHtml(COLORREF clr)
{
CString str;
str.Format(_T("#%0.2x%0.2x%0.2x"), GetRValue(clr), GetGValue(clr), GetBValue(clr));
return str;
}
CString CCircle::GetTooltip()
{
CString strCenter; strCenter.Format(_T("(%i, %i)"), m_ptCenter.x, m_ptCenter.y);
CString strRadius; strRadius.Format(_T("%i"), m_nRadius);
CString strColor; strColor.Format(_T("(%i, %i, %i)"), GetRValue(m_clr), GetGValue(m_clr), GetBValue(m_clr));
CString strHTML;
#ifdef _HTML
strHTML.Format(
_T("<table cellpadding=4 cellspacing=0 border=1 bordercolor=#808080>")
_T("<tr><td bgColor=#e0e0e0>Center:</td><td>%s</td></tr>")
_T("<tr><td bgColor=#e0e0e0>Radius:</td><td>%s</td></tr>")
_T("<tr><td bgColor=#e0e0e0>Color:</td><td bgcolor=%s>%s</td></tr></table>"),
(LPCTSTR)strCenter, (LPCTSTR)strRadius, (LPCTSTR)ColorToHtml(m_clr), (LPCTSTR)strColor);
#else
strHTML.Format(
_T("<Border BorderThickness='1' BorderBrush='#808080'>")
_T("<Grid>")
_T("<Grid.ColumnDefinitions><ColumnDefinition Width='Auto'/><ColumnDefinition Width='Auto'/></Grid.ColumnDefinitions>")
_T("<Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions>")
_T("<Border Padding='3' Grid.Column='0' Grid.Row='0' BorderThickness='1' Background='#e0e0e0' BorderBrush='#808080'><TextBlock Text='Center:'/></Border>")
_T("<Border Padding='3' Grid.Column='0' Grid.Row='1' BorderThickness='1' Background='#e0e0e0' BorderBrush='#808080'><TextBlock Text='Radius:'/></Border>")
_T("<Border Padding='3' Grid.Column='0' Grid.Row='2' BorderThickness='1' Background='#e0e0e0' BorderBrush='#808080'><TextBlock Text='Color:'/></Border>")
_T("<Border Padding='3' Grid.Column='1' Grid.Row='0' BorderThickness='1' Background='White' BorderBrush='#808080'><TextBlock Text='%s'/></Border>")
_T("<Border Padding='3' Grid.Column='2' Grid.Row='1' BorderThickness='1' Background='White' BorderBrush='#808080'><TextBlock Text='%s'/></Border>")
_T("<Border Padding='3' Grid.Column='3' Grid.Row='2' BorderThickness='1' Background='%s' BorderBrush='#808080'><TextBlock Text='%s'/></Border>")
_T("</Grid>")
_T("</Border>"),
(LPCTSTR)strCenter, (LPCTSTR)strRadius, (LPCTSTR)ColorToHtml(m_clr), (LPCTSTR)strColor);
#endif
return strHTML;
}
INT_PTR CToolTipContextView::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
{
ASSERT_VALID(this);
ASSERT(::IsWindow(m_hWnd));
// check child windows first by calling CControlBar
INT_PTR nHit = CWnd::OnToolHitTest(point, pTI);
if (nHit != -1)
return nHit;
CCircle* pCircle = HitTest(point);
if (pCircle)
{
nHit = (INT_PTR)pCircle;
CString strTip = pCircle->GetTooltip();
if (strTip.GetLength() == 0)
return -1;
CXTPToolTipContext::FillInToolInfo(pTI, m_hWnd, pCircle->GetRect(),
nHit, strTip);
return nHit;
}
return -1;
}