DragonNest/Third/XTToolkitPro/Source/Markup/XTPMarkupImage.cpp

147 lines
3.8 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
// XTPMarkupImage.cpp: implementation of the CXTPMarkupImage 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 "Common/XTPImageManager.h"
#include "XTPMarkupImage.h"
#include "XTPMarkupDrawingContext.h"
#include "XTPMarkupContext.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CXTPMarkupDependencyProperty* CXTPMarkupImage::m_pSourceProperty = NULL;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
IMPLEMENT_MARKUPCLASS(L"Image", CXTPMarkupImage, CXTPMarkupFrameworkElement)
void CXTPMarkupImage::RegisterMarkupClass()
{
m_pSourceProperty = CXTPMarkupDependencyProperty::Register(L"Source", MARKUP_TYPE(CXTPMarkupString), MARKUP_TYPE(CXTPMarkupImage),
new CXTPMarkupPropertyMetadata(NULL, CXTPMarkupPropertyMetadata::flagAffectsMeasure));
}
CXTPMarkupImage::CXTPMarkupImage()
{
m_pImageManager = NULL;
m_pImage = NULL;
}
CXTPMarkupImage::~CXTPMarkupImage()
{
CMDTARGET_RELEASE(m_pImage);
CMDTARGET_RELEASE(m_pImageManager);
}
void CXTPMarkupImage::LoadImage()
{
CXTPMarkupString* pSource = MARKUP_STATICCAST(CXTPMarkupString, GetValue(m_pSourceProperty));
if (!pSource)
return;
CMDTARGET_RELEASE(m_pImageManager);
CMDTARGET_RELEASE(m_pImage);
LPCWSTR lpszSource = (*pSource);
if (wcsncmp(lpszSource, L"file://", 7) == 0)
{
CString strFileName(lpszSource + 7);
m_pImageManager = new CXTPImageManager();
m_pImageManager->SetMaskColor(0x00FF00);
BOOL bAlphaBitmap = FALSE;
HBITMAP hBitmap = CXTPImageManagerIcon::LoadBitmapFromFile(strFileName, &bAlphaBitmap);
if (hBitmap)
{
CBitmap bmp;
bmp.Attach(hBitmap),
m_pImageManager->SetIcons(bmp, 0, 1, 0, xtpImageNormal, bAlphaBitmap);
}
m_pImage = m_pImageManager->GetImage(0, 0);
CMDTARGET_ADDREF(m_pImage);
}
else if (wcsncmp(lpszSource, L"res://", 6) == 0)
{
CString strResourceName(lpszSource + 6);
m_pImageManager = new CXTPImageManager();
m_pImageManager->SetMaskColor(0x00FF00);
BOOL bAlphaBitmap = FALSE;
HBITMAP hBitmap = CXTPImageManagerIcon::LoadBitmapFromResource(AfxGetInstanceHandle(), strResourceName, &bAlphaBitmap);
if (hBitmap)
{
CBitmap bmp;
bmp.Attach(hBitmap),
m_pImageManager->SetIcons(bmp, 0, 1, 0, xtpImageNormal, bAlphaBitmap);
}
else
{
m_pImageManager->SetIcon(strResourceName, 0);
}
m_pImage = m_pImageManager->GetImage(0, 0);
CMDTARGET_ADDREF(m_pImage);
}
else
{
int nIndex = _wtoi(lpszSource);
if (nIndex > 0)
{
m_pImageManager = m_pMarkupContext->m_pImageManager ? m_pMarkupContext->m_pImageManager : XTPImageManager();
CMDTARGET_ADDREF(m_pImageManager);
m_pImage = m_pImageManager->GetImage(nIndex, 0);
CMDTARGET_ADDREF(m_pImage);
}
}
}
CSize CXTPMarkupImage::MeasureOverride(CXTPMarkupDrawingContext* /*pDC*/, CSize /*constraint*/)
{
LoadImage();
if (!m_pImage)
return CSize(0, 0);
return CSize(m_pImage->GetWidth(), m_pImage->GetHeight());
}
void CXTPMarkupImage::OnRender(CXTPMarkupDrawingContext* pDC)
{
CSize szRender = GetRenderSize();
if (!m_pImage)
return;
m_pImage->Draw(CDC::FromHandle(pDC->GetSafeHdc()), CPoint(0, 0), szRender);
}