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

对话框与窗口

开发平台:

Visual C++

  1. // XTPMarkupImage.cpp: implementation of the CXTPMarkupImage 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 "Common/XTPImageManager.h"
  22. #include "XTPMarkupImage.h"
  23. #include "XTPMarkupDrawingContext.h"
  24. #include "XTPMarkupContext.h"
  25. #ifdef _DEBUG
  26. #undef THIS_FILE
  27. static char THIS_FILE[]=__FILE__;
  28. #define new DEBUG_NEW
  29. #endif
  30. CXTPMarkupDependencyProperty* CXTPMarkupImage::m_pSourceProperty = NULL;
  31. //////////////////////////////////////////////////////////////////////
  32. // Construction/Destruction
  33. //////////////////////////////////////////////////////////////////////
  34. IMPLEMENT_MARKUPCLASS(L"Image", CXTPMarkupImage, CXTPMarkupFrameworkElement)
  35. void CXTPMarkupImage::RegisterMarkupClass()
  36. {
  37. m_pSourceProperty = CXTPMarkupDependencyProperty::Register(L"Source", MARKUP_TYPE(CXTPMarkupString), MARKUP_TYPE(CXTPMarkupImage),
  38. new CXTPMarkupPropertyMetadata(NULL, CXTPMarkupPropertyMetadata::flagAffectsMeasure));
  39. }
  40. CXTPMarkupImage::CXTPMarkupImage()
  41. {
  42. m_pImageManager = NULL;
  43. m_pImage = NULL;
  44. }
  45. CXTPMarkupImage::~CXTPMarkupImage()
  46. {
  47. CMDTARGET_RELEASE(m_pImage);
  48. CMDTARGET_RELEASE(m_pImageManager);
  49. }
  50. void CXTPMarkupImage::LoadImage()
  51. {
  52. CXTPMarkupString* pSource = MARKUP_STATICCAST(CXTPMarkupString, GetValue(m_pSourceProperty));
  53. if (!pSource)
  54. return;
  55. CMDTARGET_RELEASE(m_pImageManager);
  56. CMDTARGET_RELEASE(m_pImage);
  57. LPCWSTR lpszSource = (*pSource);
  58. if (wcsncmp(lpszSource, L"file://", 7) == 0)
  59. {
  60. CString strFileName(lpszSource + 7);
  61. m_pImageManager = new CXTPImageManager();
  62. m_pImageManager->SetMaskColor(0x00FF00);
  63. BOOL bAlphaBitmap = FALSE;
  64. HBITMAP hBitmap = CXTPImageManagerIcon::LoadBitmapFromFile(strFileName, &bAlphaBitmap);
  65. if (hBitmap)
  66. {
  67. CBitmap bmp;
  68. bmp.Attach(hBitmap),
  69. m_pImageManager->SetIcons(bmp, 0, 1, 0, xtpImageNormal, bAlphaBitmap);
  70. }
  71. m_pImage = m_pImageManager->GetImage(0, 0);
  72. CMDTARGET_ADDREF(m_pImage);
  73. }
  74. else if (wcsncmp(lpszSource, L"res://", 6) == 0)
  75. {
  76. CString strResourceName(lpszSource + 6);
  77. m_pImageManager = new CXTPImageManager();
  78. m_pImageManager->SetMaskColor(0x00FF00);
  79. BOOL bAlphaBitmap = FALSE;
  80. HBITMAP hBitmap = CXTPImageManagerIcon::LoadBitmapFromResource(AfxGetInstanceHandle(), strResourceName, &bAlphaBitmap);
  81. if (hBitmap)
  82. {
  83. CBitmap bmp;
  84. bmp.Attach(hBitmap),
  85. m_pImageManager->SetIcons(bmp, 0, 1, 0, xtpImageNormal, bAlphaBitmap);
  86. }
  87. else
  88. {
  89. m_pImageManager->SetIcon(strResourceName, 0);
  90. }
  91. m_pImage = m_pImageManager->GetImage(0, 0);
  92. CMDTARGET_ADDREF(m_pImage);
  93. }
  94. else
  95. {
  96. int nIndex = _wtoi(lpszSource);
  97. if (nIndex > 0)
  98. {
  99. m_pImageManager = m_pMarkupContext->m_pImageManager ? m_pMarkupContext->m_pImageManager : XTPImageManager();
  100. CMDTARGET_ADDREF(m_pImageManager);
  101. m_pImage = m_pImageManager->GetImage(nIndex, 0);
  102. CMDTARGET_ADDREF(m_pImage);
  103. }
  104. }
  105. }
  106. CSize CXTPMarkupImage::MeasureOverride(CXTPMarkupDrawingContext* /*pDC*/, CSize /*constraint*/)
  107. {
  108. LoadImage();
  109. if (!m_pImage)
  110. return CSize(0, 0);
  111. return CSize(m_pImage->GetWidth(), m_pImage->GetHeight());
  112. }
  113. void CXTPMarkupImage::OnRender(CXTPMarkupDrawingContext* pDC)
  114. {
  115. CSize szRender = GetRenderSize();
  116. if (!m_pImage)
  117. return;
  118. m_pImage->Draw(CDC::FromHandle(pDC->GetSafeHdc()), CPoint(0, 0), szRender);
  119. }