DragonNest/Third/XTToolkitPro/Source/Common/XTPOffice2007Image.h
2024-12-19 09:48:26 +08:00

213 lines
5.2 KiB
C++

// XTPOffice2007Image.h: interface for the CXTPOffice2007Image 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
//
/////////////////////////////////////////////////////////////////////////////
//{{AFX_CODEJOCK_PRIVATE
#if !defined(__XTPOFFICE2007IMAGE_H__)
#define __XTPOFFICE2007IMAGE_H__
//}}AFX_CODEJOCK_PRIVATE
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//{{AFX_CODEJOCK_PRIVATE
#include "Common/XTPSystemHelpers.h"
// Private image wrappers:
#define XTP_DI_COMPOSITE 1
class CXTPOffice2007Images;
class CXTPOffice2007ImageList;
class CXTPNotifyConnection;
class _XTP_EXT_CLASS CXTPOffice2007Image : public CXTPCmdTarget
{
public:
CXTPOffice2007Image(CXTPOffice2007Images* pImages);
virtual ~CXTPOffice2007Image();
public:
BOOL LoadFile(HMODULE hModule, LPCTSTR lpszBitmapFileName);
void SetBitmap(HBITMAP hBitmap, BOOL bAlpha = FALSE);
void DrawImage(CDC* pDC, const CRect& rcDest, CRect rcSrc, const CRect& rcSizingMargins, COLORREF clrTransparent, DWORD dwFlags);
void DrawImage(CDC* pDC, const CRect& rcDest, CRect rcSrc, const CRect& rcSizingMargins, COLORREF clrTransparent);
void DrawImage(CDC* pDC, const CRect& rcDest, CRect rcSrc, CRect rcSizingMargins);
void DrawImage(CDC* pDC, const CRect& rcDest, CRect rcSrc);
int GetHeight() const;
int GetWidth() const;
CSize GetExtent() const;
BOOL IsAlphaImage() const;
void PreserveOrientation() {
m_bImageOrientaionPreserved = TRUE;
}
CRect GetSource(int nState = 0, int nCount = 1) const;
BOOL GetBitmapPixel(CPoint pt, COLORREF& clrPixel);
void Premultiply();
protected:
BOOL DrawImagePart(CDC* pDCDest, CRect rcDest,
CDC* pDCSrc, CRect rcSrc) const;
BOOL DrawImageTile(CDC* pDCDest, const CRect& rcDest,
CDC* pDCSrc, const CRect& rcSrc, BOOL bTile) const;
void InvertBitmap();
BOOL ConvertToBits(HBITMAP hBitmap);
protected:
LPVOID m_pBits;
BOOL m_bAlpha;
BOOL m_bMultiply;
BOOL m_bImageOrientaionPreserved;
BOOL m_bInvert;
CSize m_szExtent;
CXTPOffice2007Images* m_pImages;
friend class CXTPOffice2007Images;
friend class CXTPOffice2007ImageList;
};
class _XTP_EXT_CLASS CXTPOffice2007Images : public CXTPCmdTarget
{
private:
class CBitmapDC : public CDC
{
public:
CBitmapDC()
{
m_hOldBitmap = 0;
}
~CBitmapDC()
{
if (m_hOldBitmap)
{
::SelectObject(GetSafeHdc(), m_hOldBitmap);
}
}
void SetBitmap(HBITMAP hBitmap)
{
if (hBitmap)
{
m_hOldBitmap = (HBITMAP)::SelectObject(GetSafeHdc(), hBitmap);
}
else if (m_hOldBitmap)
{
::SelectObject(GetSafeHdc(), m_hOldBitmap);
m_hOldBitmap = NULL;
}
}
HBITMAP m_hOldBitmap;
};
public:
CXTPOffice2007Images();
~CXTPOffice2007Images();
public:
void RemoveAll();
CXTPOffice2007Image* LoadFile(LPCTSTR lpszImageFile);
BOOL SetHandle(HMODULE hResource, LPCTSTR lpszIniFileName = NULL, BOOL bFreeOnRelease = FALSE);
BOOL SetHandle(LPCTSTR lpszFile, LPCTSTR lpszIniFileName = NULL);
BOOL InitResourceHandle(LPCTSTR lpszTestImageFile, LPCTSTR lpResType = RT_BITMAP);
COLORREF GetImageColor(CString strSectionName, CString strKeyName);
CString GetImageString(CString strSectionName, CString strKeyName);
CString GetImageValue(CString strSectionName, CString strKeyName);
BOOL IsValid() const;
CXTPNotifyConnection* GetConnection();
CString m_strHandle;
protected:
CXTPOffice2007Image* LoadImage(CString strImageFile);
CString _ImageNameToResourceName(CString strImageFile);
private:
void RefreshSettings();
BOOL ReadString(CString& str, LPSTR& lpTextFile);
static BOOL CALLBACK EnumResNameProc(HMODULE hModule,
LPCTSTR lpszType, LPTSTR lpszName, LONG_PTR lParam);
HRSRC FindResourceIniFile(HMODULE hResource);
protected:
HMODULE m_hResource;
LPSTR m_lpTextFile;
LPSTR m_lpTextFileEnd;
BOOL m_bFreeOnRelease;
CRITICAL_SECTION m_cs;
CBitmapDC m_dc;
HBITMAP m_hbmLayer;
LPDWORD m_pLayerBits;
CXTPNotifyConnection* m_pConnection;
protected:
CMapStringToPtr m_mapImages;
friend class CXTPOffice2007Image;
};
class _XTP_EXT_CLASS CXTPOffice2007ImageList : public CXTPOffice2007Images
{
DECLARE_DYNCREATE(CXTPOffice2007ImageList)
friend class CXTPOffice2007Image;
public:
CXTPOffice2007ImageList();
virtual ~CXTPOffice2007ImageList();
CXTPOffice2007Image* GetBitmap(UINT nID);
CXTPOffice2007Image* SetBitmap(HBITMAP hBitmap, UINT nID, BOOL bAlptha, BOOL bCopyBitmap = TRUE);
BOOL SetBitmap(CXTPOffice2007Image* pImage, UINT nID, BOOL bCallAddRef);
BOOL LoadBitmap(LPCTSTR lpcszPath, UINT nID);
BOOL Remove(UINT nID);
void RemoveAll();
protected:
CMap<UINT, UINT, CXTPOffice2007Image*, CXTPOffice2007Image*> m_mapID2Image;
protected:
};
_XTP_EXT_CLASS CXTPOffice2007Images* AFX_CDECL XTPOffice2007Images();
//}}AFX_CODEJOCK_PRIVATE
#endif // !defined(__XTPOFFICE2007IMAGE_H__)