Click here to Skip to main content
15,892,643 members
Articles / Multimedia / GDI+

Presenting EMFexplorer, a GDI+ experiment

Rate me:
Please Sign up or sign in to vote.
4.90/5 (28 votes)
29 Sep 20047 min read 129.1K   3.2K   49  
High quality EMF rendering, using GDI+
/*
*	This file is part of the EMFexplorer projet.
*	Copyright (C) 2004 Smith Charles.
*
*	This library is free software; you can redistribute it and/or
*	modify it under the terms of the GNU Lesser General Public
*	License as published by the Free Software Foundation; either
*	version 2.1 of the License, or (at your option) any later version.
*
*   This library is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*   Lesser General Public License for more details.
*
*   You should have received a copy of the GNU Lesser General Public
*   License along with this library; if not, write to the Free Software
*   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
*
*	Extension: for commercial use, apply the Equity Public License, which
*	adds to the normal terms of the GLPL a condition of donation to the author.
*   If you are interested in support for this source code,
*   contact Smith Charles <smith.charles@free.fr> for more information.
*/
#ifndef _SCWINTHUMBS_H_
#define _SCWINTHUMBS_H_

#include "unknwn.h"		// or GDI+ won't let us compile
#include "gdiplus.h"

#include "SCMemDC.h"
#include "SCGenInclude.h"
#include SC_INC_GENLIB(SCGenDefs.h)


#define GReal		Gdiplus::REAL
#define GGraphics	Gdiplus::Graphics

#define THN_SELCHANGE	0x8000 // user-defined notification

typedef Gdiplus::Image* PSCThumbImage;

class SMC_INTERFACE I_SCThumbsHolder
{
public:
	virtual void SCSetThumbsSize(CSize& size) = 0;
	virtual PSCThumbImage SCGetThumbImage(int iThumbIdx) = 0;
};


/////////////////////////////////////////////////////////////////////////////
// CSCWinThumbs control

class CSCWinThumbs : public CWnd
{
// Construction
public:
	CSCWinThumbs();

// Attributes
public:
	// setters
	void SCSetThumbSize(CSize size)
	{
		m_ThumbsMinSize = size;
		SCComputeRowsCols();
	}
	void SCSetCurSel(int iCurSel)
	{
		m_iCurSel = iCurSel;
		SCEnsureCurThumbVisible();
		//Invalidate();
	}
	void SCSetShowNum(BOOL bShow)
	{
		m_bShowNum = bShow;
		Invalidate();
	}
	void SCSetProgressDraw(BOOL bProgessDraw) { m_bProgessDraw = bProgessDraw; }
	void SCSetFont(CFont* pFont) { m_pFont = pFont;}

	// getters
	int SCGetCurSel() const { return m_iCurSel; }
	int SCGetNbPgRows() const { return m_uiNbRows; }
	int SCGetNbPgCols() const { return m_uiNbCols; }

// Operation
public:
	void SCSetThumbsHolder(I_SCThumbsHolder* pHolder, int iNbThumbs);

// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CSCWinThumbs)
	protected:
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	//}}AFX_VIRTUAL

// Implementation
public:
	virtual ~CSCWinThumbs();
	void SCReset();
	void SCInitCtl();

	// Generated message map functions
protected:
	//{{AFX_MSG(CSCWinThumbs)
	afx_msg void OnPaint();
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
	virtual void OnSize(UINT nType, int cx, int cy);
	afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

protected:
	void SCInitializeScrollBars(int width, int height);
	void SCSizeScrollBars(int width, int height);
	BOOL ScrollChildWindow(int nScrollBar, UINT  wScrollCode, int iCount=1);
	void SCPaint(CPaintDC &dc);
	void SCDrawNumber(int xDest, int yDest, UINT uiThumbIdx);
	int SCComputeHitTest(CPoint point);
	void SCComputeRowsCols();
	void SCNotifyParent();
	void SCEnsureCurThumbVisible();
	void SCGetThumbPos(int iThumbIdx, int& xThumbLeft, int& yThumbTop);

	inline int SCNbColsInSpace(int iWndCx, int iImgCx);
	inline int SCNbRowsInCols(int iNbCols);


private:
	I_SCThumbsHolder*	m_pIThumbsHolder;
	CSize				m_ThumbsMinSize; // set by thumbs holder
	CSize				m_ThumbsSize;	 // computed size
	int					m_iCurSel;

	BOOL		m_bAdjusting;
	BOOL		m_bShowNum;
	int			m_uiNbThumbs;	// total number of thumbs (set by thumbs holder)
	int			m_uiNbRows;		// computed number of rows  
	int			m_uiNbCols;		// computed number of columns
	int			m_iMarginX;
	int			m_iMarginY;
	int			m_iWorldCx;
	int			m_iWorldCy;
	CSCMemDC	m_WorkMemDC;
	CFont*		m_pFont;
	BOOL		m_bProgessDraw;
	BOOL		m_bLastSeen;
};


#endif //_SCWINTHUMBS_H_
//  ------------------------------------------------------------

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
France France
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions