You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
8.5 KiB
C++
222 lines
8.5 KiB
C++
// XTPSkinImage.h: interface for the CXTPSkinImage class.
|
|
//
|
|
// This file is a part of the XTREME SKINFRAMEWORK 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(__XTPSKINIMAGE_H__)
|
|
#define __XTPSKINIMAGE_H__
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
class CXTPSkinManagerResourceFile;
|
|
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPSkinImage class represents simple bitmap holder and draw operations for Skin Framework
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPSkinImage
|
|
{
|
|
private:
|
|
struct SOLIDRECT
|
|
{
|
|
RECT rc;
|
|
COLORREF clr;
|
|
};
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPSkinImage object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPSkinImage();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPSkinImage object, handles cleanup and deallocation.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPSkinImage();
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This method is called to load bitmap from dll using its name identifier
|
|
// Parameters:
|
|
// hModule - Module handle
|
|
// lpszBitmapFileName - Bitmap file name
|
|
// lpszFileName - File name on disk to load
|
|
// Returns:
|
|
// TRUE if successful, otherwise returns FALSE
|
|
//-----------------------------------------------------------------------
|
|
BOOL LoadFile(LPCTSTR lpszFileName);
|
|
BOOL LoadFile(HMODULE hModule, LPCTSTR lpszBitmapFileName); //<COMBINE CXTPSkinImage::LoadFile@LPCTSTR>
|
|
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to assign bitmap handle to CXTPSkinImage class
|
|
// Parameters:
|
|
// hBitmap - Bitmap handle
|
|
// bAlpha - TRUE if bitmap contains alpha pixels
|
|
//-----------------------------------------------------------------------
|
|
void SetBitmap(HBITMAP hBitmap, BOOL bAlpha = FALSE);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Draws the image in specified location.
|
|
// Parameters:
|
|
// pDC - Destination device context.
|
|
// rcDest - Specifies the location of the destination rectangle
|
|
// rcSrc - Specifies the location of the source rectangle
|
|
// rcSizingMargins - Specifies sizing margins
|
|
// nSizingType - Stretch type
|
|
// bBorderOnly - TRUE to draw only borders
|
|
// clrTransparent - Transparent color
|
|
//-----------------------------------------------------------------------
|
|
void DrawImage(CDC* pDC, const CRect& rcDest, const CRect& rcSrc, const CRect& rcSizingMargins, int nSizingType, BOOL bBorderOnly);
|
|
void DrawImage(CDC* pDC, const CRect& rcDest, const CRect& rcSrc, const CRect& rcSizingMargins, COLORREF clrTransparent, int nSizingType, BOOL bBorderOnly); // <combine CXTPSkinImage::DrawImage@CDC*@const CRect&@const CRect&@const CRect&@int@BOOL>
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Retrieves height of the bitmap
|
|
//-----------------------------------------------------------------------
|
|
DWORD GetHeight() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Retrieves width of the bitmap
|
|
//-----------------------------------------------------------------------
|
|
DWORD GetWidth() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Retrieves extent of the bitmap
|
|
//-----------------------------------------------------------------------
|
|
CSize GetExtent() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Determines if bitmap has alpha pixels
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsAlphaImage() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Calculates position of image
|
|
// Parameters:
|
|
// nState - Image index to retrieve
|
|
// nCount - Total image count
|
|
// Returns: Position of specified image
|
|
//-----------------------------------------------------------------------
|
|
CRect GetSource(int nState = 0, int nCount = 1) const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Helper method that splits image to solid rectangles for faster drawing.
|
|
// Parameters:
|
|
// nBitmaps - Image identifier
|
|
// bHorizontalImage - TRUE if images aranged horizontaly
|
|
// rcSizingMargins - Sizong margins
|
|
// Returns: Position of specified image
|
|
//-----------------------------------------------------------------------
|
|
void CreateSolidRectArray(int nBitmaps, BOOL bHorizontalImage, const CRect& rcSizingMargins);
|
|
|
|
private:
|
|
|
|
BOOL DrawImagePart(CDC* pDCDest, const CRect& rcDest,
|
|
CDC* pDCSrc, const CRect& rcSrc) const;
|
|
|
|
BOOL DrawImageTile(CDC* pDCDest, const CRect& rcDest,
|
|
CDC* pDCSrc, const CRect& rcSrc, BOOL bTile) const;
|
|
|
|
void FilterImage(COLORREF clrTransparent);
|
|
void InvertBitmap();
|
|
BOOL FindSolidRect(const CRect& rcSrc, SOLIDRECT& sr) const;
|
|
CSize _GetExtent() const;
|
|
BOOL CheckBitmapRect(LPBYTE pBits, CRect rcCheck, CSize sz);
|
|
|
|
public:
|
|
BOOL m_bMirrorImage; // TRUE to Invert image in RTL mode
|
|
|
|
protected:
|
|
HBITMAP m_hBitmap; // Bitmap handle
|
|
BOOL m_bAlpha; // TRUE if bitmap has alpha pixels
|
|
BOOL m_bFiltered; // TRUE if image was filtered
|
|
BOOL m_bInvert; // TRUE if image is inverted for RTL mode
|
|
BOOL m_bOptimized; // TRUE if image is splited to solid parts
|
|
CSize m_szBitmap; // Bitmaps size of image
|
|
COLORREF m_clrTransparent;
|
|
CArray<SOLIDRECT, SOLIDRECT&> m_arrSolidRects; // Solid parts of image
|
|
};
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPSkinImages represents cashed collection of CXTPSkinImage classes
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPSkinImages
|
|
{
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPSkinImages object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPSkinImages();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPSkinImages object, handles cleanup and deallocation.
|
|
//-----------------------------------------------------------------------
|
|
~CXTPSkinImages();
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to remove all images
|
|
//-----------------------------------------------------------------------
|
|
void RemoveAll();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to load image from resource file
|
|
// Parameters:
|
|
// pResourceFile - Resource file pointer
|
|
// lpszImageFile - Path to Image
|
|
// Returns:
|
|
// New CXTPSkinImage object if successful, otherwise returns NULL
|
|
//-----------------------------------------------------------------------
|
|
CXTPSkinImage* LoadFile(CXTPSkinManagerResourceFile* pResourceFile, LPCTSTR lpszImageFile);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to get extent of image in resource file.
|
|
// Parameters:
|
|
// pResourceFile - Resource file pointer
|
|
// lpszImageFile - Path to Image
|
|
// Returns:
|
|
// Extent of image.
|
|
//-----------------------------------------------------------------------
|
|
CSize GetExtent(CXTPSkinManagerResourceFile* pResourceFile, LPCTSTR lpszImageFile);
|
|
|
|
protected:
|
|
CMapStringToPtr m_mapImages; // Collection of images
|
|
};
|
|
|
|
#endif // !defined(__XTPSKINIMAGE_H__)
|