You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
8.5 KiB
C++

// XTPChartControl.h
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2012 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
//
/////////////////////////////////////////////////////////////////////////////
//{{AFX_CODEJOCK_PRIVATE
#if !defined(__XTPCHARTCONTROL_H__)
#define __XTPCHARTCONTROL_H__
//}}AFX_CODEJOCK_PRIVATE
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CXTPChartContent;
class CXTPChartDeviceCommand;
class CXTPChartDrawThread;
class CXTPChartDrawThreadDeviceCommand;
class CXTPChartContentView;
class CXTPToolTipContext;
//===========================================================================
// Summary:
// CXTPChartControl is CWnd derived class, represents main Window that holds Content and draw chart
// Remarks:
//===========================================================================
class _XTP_EXT_CLASS CXTPChartControl : public CWnd, public CXTPChartContainer
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CXTPChartControl object.
// Remarks:
//-----------------------------------------------------------------------
CXTPChartControl();
//-------------------------------------------------------------------------
// Summary:
// Destroys a CXTPChartControl object, handles cleanup
//-------------------------------------------------------------------------
virtual ~CXTPChartControl();
public:
//-----------------------------------------------------------------------
// Summary:
// Call this function to get the pointer to Content object
// Returns:
// A pointer to CXTPChartContent object.
// Remarks:
//-----------------------------------------------------------------------
CXTPChartContent* GetContent() const;
public:
//-----------------------------------------------------------------------
// Summary:
// This method creates the Chart Control
// Parameters:
// dwStyle - Style for the window.
// rect - Specifies the size and position of the control.
// pParentWnd - Specifies the parent window of the control.
// nID - Specifies the window control ID.
// Returns:
// TRUE if successful, otherwise returns FALSE.
//-----------------------------------------------------------------------
BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
void Draw(CDC *pDC, CRect rc);
public:
//-----------------------------------------------------------------------
// Summary:
// Call this function whenever a change in the content of the chart.
// This call causes a redraw.
// Parameters:
// updateOptions - Options that indicated what kind of changes done.
// Remarks:
//-----------------------------------------------------------------------
void OnChartChanged(XTPChartUpdateOptions updateOptions = xtpChartUpdateView);
//-----------------------------------------------------------------------
// Summary:
// Register the window class if it has not already been registered.
// Parameters:
// hInstance - Instance of resource where control is located
// Returns:
// TRUE if the window class was successfully registered.
//-----------------------------------------------------------------------
BOOL RegisterWindowClass(HINSTANCE hInstance = NULL);
public:
//-----------------------------------------------------------------------
// Summary:
// Call this method to hit test element under cursor
// Parameters:
// point - Position to hit test.
// Returns:
// Pointer to CXTPChartElement element under position.
//-----------------------------------------------------------------------
CXTPChartElement* HitTest(CPoint point) const;
//-----------------------------------------------------------------------
// Summary:
// Call this method to draw chart to device context
// Parameters:
// hDC - Device context to draw to
// szBounds - Bounding position for chart
//-----------------------------------------------------------------------
void PrintToDC(HDC hDC, CRect rcBounds);
//-----------------------------------------------------------------------
// Summary:
// Call this method to save chart to file as image
// Parameters:
// lpszFilePath - File path to save
// szBounds - Bounding size for chart
//-----------------------------------------------------------------------
void SaveAsImage(LPCTSTR lpszFilePath, CSize szBounds);
//-----------------------------------------------------------------------
// Summary:
// Call this method to set content of chart control
// Parameters:
// pContent - Pointer to new content
//-----------------------------------------------------------------------
void SetContent(CXTPChartContent* pContent);
//-----------------------------------------------------------------------
// Summary:
// Call this method to set for best reaction to Chart changes. After each chart Changes, ChartControl will call UpdateWindow to redraw it.
// Parameters:
// bUpdateWindow - TRUE to call UpdateWindow after each changes.
//-----------------------------------------------------------------------
void SetUpdateWindow(BOOL bUpdateWindow);
//-----------------------------------------------------------------------
// Summary:
// Call this method to get tooltip context pointer.
//-----------------------------------------------------------------------
CXTPToolTipContext* GetToolTipContext() const;
//-----------------------------------------------------------------------
// Summary:
// Call this method to enable Chart tooltips
//-----------------------------------------------------------------------
void EnableToolTips(BOOL bEnable /* = TRUE */);
public:
//-----------------------------------------------------------------------
// Summary:
// Call this method to set capture to View.
// Parameters:
// pView - View that will receive all mouse messages.
//-----------------------------------------------------------------------
void SetCapture(CXTPChartElementView* pView);
protected:
//{{AFX_VIRTUAL(CXTPReportControl)
virtual void PreSubclassWindow();
virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
//}}AFX_VIRTUAL
//{{AFX_CODEJOCK_PRIVATE
DECLARE_MESSAGE_MAP();
afx_msg void OnPaint();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnCaptureChanged(CWnd* pWnd);
afx_msg void OnSetFocus(CWnd* pOldWnd);
afx_msg void OnKillFocus(CWnd* pNewWnd);
//}}AFX_CODEJOCK_PRIVATE
protected:
CXTPChartContent* m_pContent; // Chart Content
CBitmap m_bmpCache; // Bitmap Cache
CXTPChartDrawThreadDeviceCommand* m_pCommand; // Root of Chart Command tree
CXTPChartContentView* m_pContentView; // Current Content View
DWORD m_dwUpdateOptions; // Update options
CXTPToolTipContext* m_pToolTipContext; // Tooltip Context.
CXTPChartDrawThread* m_pDrawThread; // Helper draw thread that render 3D Charts
CXTPChartElementView* m_pCaptureView; // Captured View.
BOOL m_bUpdateWindow; // UpdateWindow flag.
};
AFX_INLINE CXTPChartContent* CXTPChartControl::GetContent() const {
return m_pContent;
}
AFX_INLINE void CXTPChartControl::SetUpdateWindow(BOOL bUpdateWindow) {
m_bUpdateWindow = bUpdateWindow;
}
AFX_INLINE CXTPToolTipContext* CXTPChartControl::GetToolTipContext() const {
return m_pToolTipContext;
}
#endif //#if !defined(__XTPCHARTCONTROL_H__)