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

对话框与窗口

开发平台:

Visual C++

  1. // XTUtil.cpp: implementation for utility classes.
  2. //
  3. // This file is a part of the XTREME CONTROLS 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 "Common/XTPVC80Helpers.h"  // Visual Studio 2005 helper functions
  22. #include "XTUtil.h"
  23. #ifdef _DEBUG
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #define new DEBUG_NEW
  27. #endif
  28. //===========================================================================
  29. // CXTIconHandle class
  30. //===========================================================================
  31. CXTIconHandle::CXTIconHandle()
  32. : m_hIcon(NULL)
  33. {
  34. }
  35. CXTIconHandle::CXTIconHandle(HICON hIcon)
  36. : m_hIcon(hIcon)
  37. {
  38. }
  39. CXTIconHandle::~CXTIconHandle()
  40. {
  41. if (m_hIcon != NULL)
  42. {
  43. ::DestroyIcon(m_hIcon);
  44. }
  45. }
  46. CXTIconHandle& CXTIconHandle::operator=(HICON hIcon)
  47. {
  48. if (m_hIcon != NULL)
  49. {
  50. ::DestroyIcon(m_hIcon);
  51. }
  52. m_hIcon = hIcon;
  53. return *this;
  54. }
  55. CSize CXTIconHandle::GetExtent(HICON hIcon)
  56. {
  57. CSize extent(0);
  58. if (hIcon)
  59. {
  60. ICONINFO iconinfo;
  61. if (::GetIconInfo(hIcon, &iconinfo))
  62. {
  63. BITMAP bmpinfo;
  64. ZeroMemory(&bmpinfo, sizeof(BITMAP));
  65. if (::GetObject(iconinfo.hbmMask, sizeof(bmpinfo), &bmpinfo))
  66. {
  67. extent.cx = (int)bmpinfo.bmWidth;
  68. extent.cy = (int)bmpinfo.bmHeight;
  69. if (!iconinfo.hbmColor)
  70. {
  71. // b/w icons have double size for XOR and AND masks
  72. extent.cy /= 2;
  73. }
  74. }
  75. // cleanup GDI
  76. if (iconinfo.hbmMask)
  77. {
  78. ::DeleteObject(iconinfo.hbmMask);
  79. }
  80. if (iconinfo.hbmColor)
  81. {
  82. ::DeleteObject(iconinfo.hbmColor);
  83. }
  84. }
  85. }
  86. return extent;
  87. }
  88. CSize CXTIconHandle::GetExtent() const
  89. {
  90. return GetExtent(m_hIcon);
  91. }
  92. HICON CXTIconHandle::ScaleToFit(HICON hIcon, CSize desiredExtent)
  93. {
  94. if (desiredExtent == CSize(0))
  95. {
  96. // invalid arg
  97. return NULL;
  98. }
  99. CSize realExtent = GetExtent(hIcon);
  100. if (realExtent == CSize(0))
  101. {
  102. // icon destroyed or not created yet
  103. return NULL;
  104. }
  105. // ensure icon retains aspect after scaling
  106. int delta = desiredExtent.cx * realExtent.cy - desiredExtent.cy * realExtent.cx;
  107. if (delta < 0)
  108. {
  109. desiredExtent.cy = MulDiv(realExtent.cy, desiredExtent.cx, realExtent.cx);
  110. }
  111. else
  112. if (delta > 0)
  113. {
  114. desiredExtent.cx = MulDiv(realExtent.cx, desiredExtent.cy, realExtent.cy);
  115. }
  116. // scale the icon
  117. CImageList images;
  118. VERIFY(images.Create(desiredExtent.cx, desiredExtent.cy, ILC_COLOR32 | ILC_MASK, 1, 1));
  119. images.Add(hIcon);
  120. return images.ExtractIcon(0);
  121. }
  122. HICON CXTIconHandle::ScaleToFit(CSize desiredExtent) const
  123. {
  124. return ScaleToFit(m_hIcon, desiredExtent);
  125. }
  126. //===========================================================================
  127. // CXTSplitPath class
  128. //===========================================================================
  129. CXTSplitPath::CXTSplitPath(LPCTSTR lpszPathBuffer/*= NULL*/)
  130. {
  131. m_szDrive[0] = 0;
  132. m_szDir[0] = 0;
  133. m_szFName[0] = 0;
  134. m_szExt[0] = 0;
  135. if (lpszPathBuffer != NULL)
  136. {
  137. SplitPath(lpszPathBuffer);
  138. }
  139. }
  140. CXTSplitPath::~CXTSplitPath()
  141. {
  142. }
  143. void CXTSplitPath::SplitPath(LPCTSTR lpszPathBuffer)
  144. {
  145. SPLITPATH_S(lpszPathBuffer, m_szDrive, m_szDir, m_szFName, m_szExt);
  146. }
  147. CString CXTSplitPath::GetDrive() const
  148. {
  149. return CString(m_szDrive);
  150. }
  151. CString CXTSplitPath::GetDir() const
  152. {
  153. return CString(m_szDir);
  154. }
  155. CString CXTSplitPath::GetFName() const
  156. {
  157. return CString(m_szFName);
  158. }
  159. CString CXTSplitPath::GetExt() const
  160. {
  161. return CString(m_szExt);
  162. }
  163. CString CXTSplitPath::GetFullPath() const
  164. {
  165. return GetDrive() + GetDir();
  166. }
  167. CString CXTSplitPath::GetFullName() const
  168. {
  169. return GetFName() + GetExt();
  170. }