// XTPFlowGraphTools.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(__XTPFLOWGRAPHTOOLS_H__) #define __XTPFLOWGRAPHTOOLS_H__ //}}AFX_CODEJOCK_PRIVATE #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 //{{AFX_CODEJOCK_PRIVATE template<typename Traits> class CXTPFlowGraphGDIHandles : public Traits { public: typedef typename Traits::FromType FromType; typedef typename Traits::ToType ToType; // ------------------------------------------------ // Summary: // Constructs a CXTPFlowGraphGDIHandles object. // ------------------------------------------------ CXTPFlowGraphGDIHandles() { m_nCount = 0; } // ------------------------------------------------------------------ // Summary: // Destroys a CXTPFlowGraphGDIHandles object, handles cleanup and // deallocation. // ------------------------------------------------------------------ ~CXTPFlowGraphGDIHandles() { for (int i = 0; i < m_nCount; i++) { DestroyHandle(m_arr[i].hTo); } } ToType GetHandle(const FromType& hFrom) { int i; for (i = 0; i < m_nCount; i++) { if (CompareHandle(m_arr[i].hFrom, hFrom)) return m_arr[i].hTo; } if (m_nCount == MAX_HANDLE) { DestroyHandle(m_arr[m_nCount - 1].hTo); } else if (m_nCount) { m_arr[m_nCount] = m_arr[m_nCount - 1]; } for (i = m_nCount - 1; i >= 1; i--) { m_arr[i] = m_arr[i - 1]; } if (m_nCount != MAX_HANDLE) m_nCount++; m_arr[0].hFrom = hFrom; m_arr[0].hTo = CreateHandle(hFrom); return m_arr[0].hTo; } struct GDIREC { FromType hFrom; ToType hTo; }; enum { MAX_HANDLE = 6 }; int m_nCount; GDIREC m_arr[MAX_HANDLE]; }; struct CXTPFlowGraphFontTraits { typedef LOGFONT FromType; typedef HFONT ToType; void DestroyHandle(HFONT hFont) { DeleteObject(hFont); } HFONT CreateHandle(const LOGFONT& lf) { return CreateFontIndirect(&lf); } BOOL CompareHandle(const LOGFONT& lfLeft, const LOGFONT& lfRight) { if (lfLeft.lfHeight != lfRight.lfHeight) return FALSE; if (lfLeft.lfWeight != lfRight.lfWeight) return FALSE; if (lfLeft.lfItalic != lfRight.lfItalic) return FALSE; if (lfLeft.lfQuality !=lfRight.lfQuality) return FALSE; if (_tcscmp(lfLeft.lfFaceName,lfRight.lfFaceName) != 0) return FALSE; return TRUE; } }; struct CXTPFlowGraphBrushTraits { typedef COLORREF FromType; typedef HBRUSH ToType; void DestroyHandle(HBRUSH hFont) { DeleteObject(hFont); } HBRUSH CreateHandle(COLORREF clr) { return CreateSolidBrush(clr); } BOOL CompareHandle(COLORREF clrLeft, COLORREF clrRight) { return clrLeft == clrRight; } }; //}}AFX_CODEJOCK_PRIVATE #endif //#if !defined(__XTPFLOWGRAPHTOOLS_H__)