| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 | 
							- // Feel free to use this code in your own applications.
 
- // The Author does not guarantee anything about this code.
 
- // Author : Yves Maurer
 
- // FormattedTextDraw.h : Declaration of the CFormattedTextDraw
 
- #ifndef __FORMATTEDTEXTDRAW_H_
 
- #define __FORMATTEDTEXTDRAW_H_
 
- #include "resource.h"       // main symbols
 
- // be sure to link this project with riched20.lib
 
- #include <richedit.h>
 
- #include <textserv.h>
 
- #ifndef LY_PER_INCH
 
- #define LY_PER_INCH   1440
 
- #define HOST_BORDER 0
 
- #endif
 
- typedef struct tagCOOKIE
 
- {
 
- 	BSTR	bstrText;
 
- 	DWORD	dwSize;
 
- 	DWORD	dwCount;
 
- } COOKIE, *PCOOKIE;
 
- // These definitions might give you problems.  If they do, open your
 
- // textserv.h and comment the following lines out. They are right at the top
 
- // EXTERN_C const IID IID_ITextServices;
 
- // EXTERN_C const IID IID_ITextHost;
 
- const IID IID_ITextServicesEx = { // 8d33f740-cf58-11ce-a89d-00aa006cadc5
 
-     0x8d33f740,
 
-     0xcf58,
 
-     0x11ce,
 
-     {0xa8, 0x9d, 0x00, 0xaa, 0x00, 0x6c, 0xad, 0xc5}
 
-  };
 
- //const IID IID_ITextHosts = { // c5bdd8d0-d26e-11ce-a89e-00aa006cadc5
 
- //    0xc5bdd8d0,
 
- //    0xd26e,
 
- //    0x11ce,
 
- //    {0xa8, 0x9e, 0x00, 0xaa, 0x00, 0x6c, 0xad, 0xc5}
 
- //  };
 
- /////////////////////////////////////////////////////////////////////////////
 
- // IFormatttedTextDraw
 
- interface IFormattedTextDraw
 
- {
 
- public:
 
- 	virtual ~IFormattedTextDraw() {};
 
- 	virtual HRESULT get_NaturalHeight(long Width, /*[out, retval]*/ long *pVal) = 0;
 
- 	virtual HRESULT get_NaturalWidth(long Height, /*[out, retval]*/ long *pVal) = 0;
 
- 	virtual HRESULT Create() = 0;
 
- 	virtual HRESULT Draw(void *hdcDraw, RECT *prc) = 0;
 
- 	virtual HRESULT get_RTFText(/*[out, retval]*/ BSTR *pVal) = 0;
 
- 	virtual HRESULT put_RTFText(/*[in]*/ BSTR newVal) = 0;
 
- // COM-like functions
 
-     virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0;
 
-     virtual ULONG STDMETHODCALLTYPE Release(void) = 0;
 
- };
 
- /////////////////////////////////////////////////////////////////////////////
 
- // CFormattedTextDraw
 
- class CFormattedTextDraw : 
 
- 	public ITextHost,
 
- 	public IFormattedTextDraw
 
- {
 
- public:
 
- 	CFormattedTextDraw()
 
- 	{
 
- 		HDC hdcScreen;
 
- 		m_RTFText = NULL;
 
- 		hdcScreen = GetDC(NULL);
 
- 		nPixelsPerInchX = GetDeviceCaps(hdcScreen, LOGPIXELSX);
 
- 		nPixelsPerInchY = GetDeviceCaps(hdcScreen, LOGPIXELSY);
 
- 		ReleaseDC(NULL, hdcScreen);
 
- 		SetRectEmpty(&m_rcClient);
 
- 		SetRectEmpty(&m_rcViewInset);
 
- 		m_pCF = (CHARFORMAT2W*) malloc(sizeof(CHARFORMAT2W));
 
- 		InitDefaultCharFormat();
 
- 		InitDefaultParaFormat();
 
- 		m_spTextServices = NULL;
 
- 		m_spTextDocument = NULL;
 
- 		m_dwPropertyBits = TXTBIT_RICHTEXT | TXTBIT_MULTILINE | TXTBIT_WORDWRAP | TXTBIT_USECURRENTBKG;
 
- 		m_dwScrollbar = 0;
 
- 		m_dwMaxLength = INFINITE;
 
- 	}
 
- 	~CFormattedTextDraw()
 
- 	{
 
- 		if (m_RTFText != NULL)
 
- 			SysFreeString(m_RTFText);
 
- 		free(m_pCF);
 
- 		if (m_spTextServices != NULL)
 
- 			m_spTextServices->Release();
 
- 		if (m_spTextDocument != NULL)
 
- 			m_spTextDocument->Release();
 
- 	}
 
- // Minimal COM functionality
 
-     HRESULT STDMETHODCALLTYPE QueryInterface( 
 
-         /* [in] */ REFIID riid,
 
-         /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
 
- 	{
 
- 		*ppvObject = NULL;
 
- 		return S_FALSE;
 
- 	}
 
-     
 
-     ULONG STDMETHODCALLTYPE AddRef(void)
 
- 	{
 
- 		return 0;
 
- 	}
 
-     
 
-     ULONG STDMETHODCALLTYPE Release(void)
 
- 	{
 
- 		return 0;
 
- 	}
 
- // IFormattedTextDraw
 
- public:
 
- 	HRESULT get_NaturalHeight(long Width, /*[out, retval]*/ long *pVal);
 
- 	HRESULT get_NaturalWidth(long Height, /*[out, retval]*/ long *pVal);
 
- 	HRESULT Create();
 
- 	HRESULT Draw(void *hdcDraw, RECT *prc);
 
- 	HRESULT get_RTFText(/*[out, retval]*/ BSTR *pVal);
 
- 	HRESULT put_RTFText(/*[in]*/ BSTR newVal);
 
- // ITextHost
 
- 	HDC TxGetDC();
 
- 	INT TxReleaseDC(HDC hdc);
 
- 	BOOL TxShowScrollBar(INT fnBar, BOOL fShow);
 
- 	BOOL TxEnableScrollBar(INT fuSBFlags, INT fuArrowflags);
 
- 	BOOL TxSetScrollRange(INT fnBar, LONG nMinPos, INT nMaxPos, BOOL fRedraw);
 
- 	BOOL TxSetScrollPos(INT fnBar, INT nPos, BOOL fRedraw);
 
- 	void TxInvalidateRect(LPCRECT prc, BOOL fMode);
 
- 	void TxViewChange(BOOL fUpdate);
 
- 	BOOL TxCreateCaret(HBITMAP hbmp, INT xWidth, INT yHeight);
 
- 	BOOL TxShowCaret(BOOL fShow);
 
- 	BOOL TxSetCaretPos(INT x, INT y);
 
- 	BOOL TxSetTimer(UINT idTimer, UINT uTimeout);
 
- 	void TxKillTimer(UINT idTimer);
 
- 	void TxScrollWindowEx(INT dx, INT dy, LPCRECT lprcScroll, LPCRECT lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate, UINT fuScroll);
 
- 	void TxSetCapture(BOOL fCapture);
 
- 	void TxSetFocus();
 
- 	void TxSetCursor(HCURSOR hcur, BOOL fText);
 
- 	BOOL TxScreenToClient(LPPOINT lppt);
 
- 	BOOL TxClientToScreen(LPPOINT lppt);
 
- 	HRESULT	TxActivate(LONG * plOldState);
 
- 	HRESULT	TxDeactivate(LONG lNewState);
 
- 	HRESULT	TxGetClientRect(LPRECT prc);
 
- 	HRESULT	TxGetViewInset(LPRECT prc);
 
- 	HRESULT TxGetCharFormat(const CHARFORMATW **ppCF);
 
- 	HRESULT	TxGetParaFormat(const PARAFORMAT **ppPF);
 
- 	COLORREF TxGetSysColor(int nIndex);
 
- 	HRESULT	TxGetBackStyle(TXTBACKSTYLE *pstyle);
 
- 	HRESULT	TxGetMaxLength(DWORD *plength);
 
- 	HRESULT	TxGetScrollBars(DWORD *pdwScrollBar);
 
- 	HRESULT	TxGetPasswordChar(TCHAR *pch);
 
- 	HRESULT	TxGetAcceleratorPos(LONG *pcp);
 
- 	HRESULT	TxGetExtent(LPSIZEL lpExtent);
 
- 	HRESULT OnTxCharFormatChange(const CHARFORMATW * pcf);
 
- 	HRESULT	OnTxParaFormatChange(const PARAFORMAT * ppf);
 
- 	HRESULT	TxGetPropertyBits(DWORD dwMask, DWORD *pdwBits);
 
- 	HRESULT	TxNotify(DWORD iNotify, void *pv);
 
- 	HIMC TxImmGetContext();
 
- 	void TxImmReleaseContext(HIMC himc);
 
- 	HRESULT	TxGetSelectionBarWidth(LONG *lSelBarWidth);
 
- // Custom functions
 
- 	HRESULT CharFormatFromHFONT(CHARFORMAT2W* pCF, HFONT hFont);
 
- 	HRESULT InitDefaultCharFormat();
 
- 	HRESULT InitDefaultParaFormat();
 
- 	HRESULT CreateTextServicesObject();
 
- // Variables
 
- 	RECT			m_rcClient;			// Client Rect
 
- 	RECT			m_rcViewInset;		// view rect inset
 
- 	SIZEL			m_sizelExtent;		// Extent array
 
- 	int				nPixelsPerInchX;    // Pixels per logical inch along width
 
- 	int				nPixelsPerInchY;    // Pixels per logical inch along height
 
- 	CHARFORMAT2W	*m_pCF;
 
- 	PARAFORMAT2		m_PF;
 
- 	DWORD			m_dwScrollbar;		// Scroll bar style
 
- 	DWORD			m_dwPropertyBits;	// Property bits
 
- 	DWORD			m_dwMaxLength;
 
- 	COOKIE			m_editCookie;
 
- 	ITextServices	*m_spTextServices;
 
- 	ITextDocument	*m_spTextDocument;
 
- 	BSTR			m_RTFText;
 
- };
 
- #endif //__FORMATTEDTEXTDRAW_H_
 
 
  |