XTPRichRender.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:16k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPRichRender.h: interface for the CXTPRichRender class.
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPRICHRENDER_H__)
  22. #define __XTPRICHRENDER_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. //{{AFX_CODEJOCK_PRIVATE
  28. #ifndef _TEXTSERV_H
  29. #define _TEXTSERV_H
  30. EXTERN_C const IID IID_ITextServices;
  31. EXTERN_C const IID IID_ITextHost;
  32. // Note: error code is first outside of range reserved for OLE.
  33. #define S_MSG_KEY_IGNORED 
  34. MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0x201)
  35. // Enums used by property methods
  36. /*
  37.  *   TXTBACKSTYLE
  38.  *
  39.  *   @enum   Defines different background styles control
  40.  */
  41. enum TXTBACKSTYLE {
  42. TXTBACK_TRANSPARENT = 0,        //@emem background should show through
  43. TXTBACK_OPAQUE,                 //@emem erase background
  44. };
  45. /*
  46.  *   TXTHITRESULT
  47.  *
  48.  *   @enum   Defines different hitresults
  49.  */
  50. enum TXTHITRESULT {
  51. TXTHITRESULT_NOHIT          = 0,    //@emem no hit
  52. TXTHITRESULT_TRANSPARENT    = 1,    //@emem point is within the text's rectangle, but
  53.                                     //in a transparent region
  54. TXTHITRESULT_CLOSE          = 2,    //@emem point is close to the text
  55. TXTHITRESULT_HIT            = 3     //@emem dead-on hit
  56. };
  57. /*
  58.  *   TXTNATURALSIZE
  59.  *
  60.  *   @enum   useful values for TxGetNaturalSize.
  61.  *
  62.   *   @xref <mf CTxtEdit::TxGetNaturalSize>
  63.  */
  64. enum TXTNATURALSIZE {
  65. TXTNS_FITTOCONTENT      = 1,        //@emem Get a size that fits the content
  66. TXTNS_ROUNDTOLINE       = 2         //@emem Round to the nearest whole line.
  67. };
  68. /*
  69.  *   TXTVIEW
  70.  *
  71.  *   @enum   useful values for TxDraw lViewId parameter
  72.  *
  73.   *   @xref <mf CTxtEdit::TxDraw>
  74.  */
  75. enum TXTVIEW {
  76. TXTVIEW_ACTIVE = 0,
  77. TXTVIEW_INACTIVE = -1
  78. };
  79. /*
  80.  *   CHANGETYPE
  81.  *
  82.  *   @enum   used for CHANGENOTIFY.dwChangeType; indicates what happened
  83.  *           for a particular change.
  84.  */
  85. enum CHANGETYPE
  86. {
  87. CN_GENERIC      = 0,                //@emem Nothing special happened
  88. CN_TEXTCHANGED  = 1,                //@emem the text changed
  89. CN_NEWUNDO      = 2,                //@emem A new undo action was added
  90. CN_NEWREDO      = 4                 //@emem A new redo action was added
  91. };
  92. /*
  93.  *   @struct CHANGENOTIFY  |
  94.  *
  95.  *   passed during an EN_CHANGE notification; contains information about
  96.  *   what actually happened for a change.
  97.  */
  98. struct CHANGENOTIFY {
  99. DWORD   dwChangeType;               //@field TEXT changed, etc
  100. void *  pvCookieData;               //@field cookie for the undo action
  101.                                     // associated with the change.
  102. };
  103. // The TxGetPropertyBits and OnTxPropertyBitsChange methods can pass the following bits:
  104. // NB!!! Do NOT rely on the ordering of these bits yet; the are subject
  105. // to change.
  106. #define TXTBIT_RICHTEXT         1       // rich-text control
  107. #define TXTBIT_MULTILINE        2       // single vs multi-line control
  108. #define TXTBIT_READONLY         4       // read only text
  109. #define TXTBIT_SHOWACCELERATOR  8       // underline accelerator character
  110. #define TXTBIT_USEPASSWORD      0x10    // use password char to display text
  111. #define TXTBIT_HIDESELECTION    0x20    // show selection when inactive
  112. #define TXTBIT_SAVESELECTION    0x40    // remember selection when inactive
  113. #define TXTBIT_AUTOWORDSEL      0x80    // auto-word selection
  114. #define TXTBIT_VERTICAL         0x100   // vertical
  115. #define TXTBIT_SELBARCHANGE     0x200   // notification that the selection bar width
  116.                                         // has changed.
  117.                                         // FUTURE: move this bit to the end to
  118.                                         // maintain the division between
  119.                                         // properties and notifications.
  120. #define TXTBIT_WORDWRAP         0x400   // if set, then multi-line controls
  121.                                         // should wrap words to fit the available
  122.                                         // display
  123. #define TXTBIT_ALLOWBEEP        0x800   // enable/disable beeping
  124. #define TXTBIT_DISABLEDRAG      0x1000  // disable/enable dragging
  125. #define TXTBIT_VIEWINSETCHANGE  0x2000  // the inset changed
  126. #define TXTBIT_BACKSTYLECHANGE  0x4000
  127. #define TXTBIT_MAXLENGTHCHANGE  0x8000
  128. #define TXTBIT_SCROLLBARCHANGE  0x10000
  129. #define TXTBIT_CHARFORMATCHANGE 0x20000
  130. #define TXTBIT_PARAFORMATCHANGE 0x40000
  131. #define TXTBIT_EXTENTCHANGE     0x80000
  132. #define TXTBIT_CLIENTRECTCHANGE 0x100000    // the client rectangle changed
  133. #define TXTBIT_USECURRENTBKG    0x200000    // tells the renderer to use the current background
  134.                                             // color rather than the system default for an entire line
  135. /*
  136.  *   ITextServices
  137.  *
  138.  *   @class  An interface extending Microsoft's Text Object Model to provide
  139.  *           extra functionality for windowless operation.  In conjunction
  140.  *           with ITextHost, ITextServices provides the means by which the
  141.  *           the RichEdit control can be used *without* creating a window.
  142.  *
  143.  *   @base   public | IUnknown
  144.  */
  145. class ITextServices : public IUnknown
  146. {
  147. public:
  148. //@cmember Generic Send Message interface
  149. virtual HRESULT     TxSendMessage(
  150. UINT msg,
  151. WPARAM wparam,
  152. LPARAM lparam,
  153. LRESULT *plresult) = 0;
  154. //@cmember Rendering
  155. virtual HRESULT     TxDraw(
  156. DWORD dwDrawAspect,
  157. LONG  lindex,
  158. void * pvAspect,
  159. DVTARGETDEVICE * ptd,
  160. HDC hdcDraw,
  161. HDC hicTargetDev,
  162. LPCRECTL lprcBounds,
  163. LPCRECTL lprcWBounds,
  164. LPRECT lprcUpdate,
  165. BOOL (CALLBACK * pfnContinue) (DWORD),
  166. DWORD dwContinue,
  167. LONG lViewId) = 0;
  168. //@cmember Horizontal scrollbar support
  169. virtual HRESULT     TxGetHScroll(
  170. LONG *plMin,
  171. LONG *plMax,
  172. LONG *plPos,
  173. LONG *plPage,
  174. BOOL * pfEnabled ) = 0;
  175. //@cmember Horizontal scrollbar support
  176. virtual HRESULT     TxGetVScroll(
  177. LONG *plMin,
  178. LONG *plMax,
  179. LONG *plPos,
  180. LONG *plPage,
  181. BOOL * pfEnabled ) = 0;
  182. //@cmember Setcursor
  183. virtual HRESULT     OnTxSetCursor(
  184. DWORD dwDrawAspect,
  185. LONG  lindex,
  186. void * pvAspect,
  187. DVTARGETDEVICE * ptd,
  188. HDC hdcDraw,
  189. HDC hicTargetDev,
  190. LPCRECT lprcClient,
  191. INT x,
  192. INT y) = 0;
  193. //@cmember Hit-test
  194. virtual HRESULT     TxQueryHitPoint(
  195. DWORD dwDrawAspect,
  196. LONG  lindex,
  197. void * pvAspect,
  198. DVTARGETDEVICE * ptd,
  199. HDC hdcDraw,
  200. HDC hicTargetDev,
  201. LPCRECT lprcClient,
  202. INT x,
  203. INT y,
  204. DWORD * pHitResult) = 0;
  205. //@cmember Inplace activate notification
  206. virtual HRESULT     OnTxInPlaceActivate(LPCRECT prcClient) = 0;
  207. //@cmember Inplace deactivate notification
  208. virtual HRESULT     OnTxInPlaceDeactivate() = 0;
  209. //@cmember UI activate notification
  210. virtual HRESULT     OnTxUIActivate() = 0;
  211. //@cmember UI deactivate notification
  212. virtual HRESULT     OnTxUIDeactivate() = 0;
  213. //@cmember Get text in control
  214. virtual HRESULT     TxGetText(BSTR *pbstrText) = 0;
  215. //@cmember Set text in control
  216. virtual HRESULT     TxSetText(LPCWSTR pszText) = 0;
  217. //@cmember Get x position of
  218. virtual HRESULT     TxGetCurTargetX(LONG *) = 0;
  219. //@cmember Get baseline position
  220. virtual HRESULT     TxGetBaseLinePos(LONG *) = 0;
  221. //@cmember Get Size to fit / Natural size
  222. virtual HRESULT     TxGetNaturalSize(
  223. DWORD dwAspect,
  224. HDC hdcDraw,
  225. HDC hicTargetDev,
  226. DVTARGETDEVICE *ptd,
  227. DWORD dwMode,
  228. const SIZEL *psizelExtent,
  229. LONG *pwidth,
  230. LONG *pheight) = 0;
  231. //@cmember Drag & drop
  232. virtual HRESULT     TxGetDropTarget( IDropTarget **ppDropTarget ) = 0;
  233. //@cmember Bulk bit property change notifications
  234. virtual HRESULT     OnTxPropertyBitsChange(DWORD dwMask, DWORD dwBits) = 0;
  235. //@cmember Fetch the cached drawing size
  236. virtual HRESULT     TxGetCachedSize(DWORD *pdwWidth, DWORD *pdwHeight)=0;
  237. };
  238. /*
  239.  *   ITextHost
  240.  *
  241.  *   @class  Interface to be used by text services to obtain text host services
  242.  *
  243.  *   @base   public | IUnknown
  244.  */
  245. class ITextHost : public IUnknown
  246. {
  247. public:
  248. //@cmember Get the DC for the host
  249. virtual HDC         TxGetDC() = 0;
  250. //@cmember Release the DC gotten from the host
  251. virtual INT         TxReleaseDC(HDC hdc) = 0;
  252. //@cmember Show the scroll bar
  253. virtual BOOL        TxShowScrollBar(INT fnBar, BOOL fShow) = 0;
  254. //@cmember Enable the scroll bar
  255. virtual BOOL        TxEnableScrollBar (INT fuSBFlags, INT fuArrowflags) = 0;
  256. //@cmember Set the scroll range
  257. virtual BOOL        TxSetScrollRange(
  258. INT fnBar,
  259. LONG nMinPos,
  260. INT nMaxPos,
  261. BOOL fRedraw) = 0;
  262. //@cmember Set the scroll position
  263. virtual BOOL        TxSetScrollPos (INT fnBar, INT nPos, BOOL fRedraw) = 0;
  264. //@cmember InvalidateRect
  265. virtual void        TxInvalidateRect(LPCRECT prc, BOOL fMode) = 0;
  266. //@cmember Send a WM_PAINT to the window
  267. virtual void        TxViewChange(BOOL fUpdate) = 0;
  268. //@cmember Create the caret
  269. virtual BOOL        TxCreateCaret(HBITMAP hbmp, INT xWidth, INT yHeight) = 0;
  270. //@cmember Show the caret
  271. virtual BOOL        TxShowCaret(BOOL fShow) = 0;
  272. //@cmember Set the caret position
  273. virtual BOOL        TxSetCaretPos(INT x, INT y) = 0;
  274. //@cmember Create a timer with the specified timeout
  275. virtual BOOL        TxSetTimer(UINT idTimer, UINT uTimeout) = 0;
  276. //@cmember Destroy a timer
  277. virtual void        TxKillTimer(UINT idTimer) = 0;
  278. //@cmember Scroll the content of the specified window's client area
  279. virtual void        TxScrollWindowEx (
  280. INT dx,
  281. INT dy,
  282. LPCRECT lprcScroll,
  283. LPCRECT lprcClip,
  284. HRGN hrgnUpdate,
  285. LPRECT lprcUpdate,
  286. UINT fuScroll) = 0;
  287. //@cmember Get mouse capture
  288. virtual void        TxSetCapture(BOOL fCapture) = 0;
  289. //@cmember Set the focus to the text window
  290. virtual void        TxSetFocus() = 0;
  291. //@cmember Establish a new cursor shape
  292. virtual void    TxSetCursor(HCURSOR hcur, BOOL fText) = 0;
  293. //@cmember Converts screen coordinates of a specified point to the client coordinates
  294. virtual BOOL        TxScreenToClient (LPPOINT lppt) = 0;
  295. //@cmember Converts the client coordinates of a specified point to screen coordinates
  296. virtual BOOL        TxClientToScreen (LPPOINT lppt) = 0;
  297. //@cmember Request host to activate text services
  298. virtual HRESULT     TxActivate( LONG * plOldState ) = 0;
  299. //@cmember Request host to deactivate text services
  300. virtual HRESULT     TxDeactivate( LONG lNewState ) = 0;
  301. //@cmember Retrieves the coordinates of a window's client area
  302. virtual HRESULT     TxGetClientRect(LPRECT prc) = 0;
  303. //@cmember Get the view rectangle relative to the inset
  304. virtual HRESULT     TxGetViewInset(LPRECT prc) = 0;
  305. //@cmember Get the default character format for the text
  306. virtual HRESULT     TxGetCharFormat(const CHARFORMATW **ppCF ) = 0;
  307. //@cmember Get the default paragraph format for the text
  308. virtual HRESULT     TxGetParaFormat(const PARAFORMAT **ppPF) = 0;
  309. //@cmember Get the background color for the window
  310. virtual COLORREF    TxGetSysColor(int nIndex) = 0;
  311. //@cmember Get the background (either opaque or transparent)
  312. virtual HRESULT     TxGetBackStyle(TXTBACKSTYLE *pstyle) = 0;
  313. //@cmember Get the maximum length for the text
  314. virtual HRESULT     TxGetMaxLength(DWORD *plength) = 0;
  315. //@cmember Get the bits representing requested scroll bars for the window
  316. virtual HRESULT     TxGetScrollBars(DWORD *pdwScrollBar) = 0;
  317. //@cmember Get the character to display for password input
  318. virtual HRESULT     TxGetPasswordChar(TCHAR *pch) = 0;
  319. //@cmember Get the accelerator character
  320. virtual HRESULT     TxGetAcceleratorPos(LONG *pcp) = 0;
  321. //@cmember Get the native size
  322. virtual HRESULT     TxGetExtent(LPSIZEL lpExtent) = 0;
  323. //@cmember Notify host that default character format has changed
  324. virtual HRESULT     OnTxCharFormatChange (const CHARFORMATW * pcf) = 0;
  325. //@cmember Notify host that default paragraph format has changed
  326. virtual HRESULT     OnTxParaFormatChange (const PARAFORMAT * ppf) = 0;
  327. //@cmember Bulk access to bit properties
  328. virtual HRESULT     TxGetPropertyBits(DWORD dwMask, DWORD *pdwBits) = 0;
  329. //@cmember Notify host of events
  330. virtual HRESULT     TxNotify(DWORD iNotify, void *pv) = 0;
  331. // Far East Methods for getting the Input Context
  332. //#ifdef WIN95_IME
  333. virtual XTP_HIMC        TxImmGetContext() = 0;
  334. virtual void        TxImmReleaseContext( XTP_HIMC himc ) = 0;
  335. //#endif
  336. //@cmember Returns HIMETRIC size of the control bar.
  337. virtual HRESULT     TxGetSelectionBarWidth (LONG *lSelBarWidth) = 0;
  338. };
  339. //+-----------------------------------------------------------------------
  340. //  Factories
  341. //------------------------------------------------------------------------
  342. // Text Services factory
  343. STDAPI CreateTextServices(
  344. IUnknown *punkOuter,
  345. ITextHost *pITextHost,
  346. IUnknown **ppUnk);
  347. typedef HRESULT (STDAPICALLTYPE * PCreateTextServices)(
  348. IUnknown *punkOuter,
  349. ITextHost *pITextHost,
  350. IUnknown **ppUnk);
  351. #endif // _TEXTSERV_H
  352. //}}AFX_CODEJOCK_PRIVATE
  353. interface ITextRange;
  354. class _XTP_EXT_CLASS CXTPRichRender : public CCmdTarget
  355. {
  356. public:
  357. CXTPRichRender();
  358. ~CXTPRichRender();
  359. CSize GetTextExtent(CDC* pDC, int nMaxWidth);
  360. void DrawText(CDC* pDC, LPCRECT lpRect);
  361. LRESULT SetText(LPCTSTR lpszText);
  362. void SetDefaultCharFormat(CHARFORMATW* pcf);
  363. ITextServices* GetTextService() const;
  364. //{{AFX_CODEJOCK_PRIVATE
  365. DECLARE_INTERFACE_MAP()
  366. BEGIN_INTERFACE_PART(TextHost, ITextHost)
  367. HDC TxGetDC();
  368. INT TxReleaseDC(HDC hdc);
  369. BOOL TxShowScrollBar(INT fnBar, BOOL fShow);
  370. BOOL TxEnableScrollBar(INT fuSBFlags, INT fuArrowflags);
  371. BOOL TxSetScrollRange(INT fnBar, LONG nMinPos, INT nMaxPos, BOOL fRedraw);
  372. BOOL TxSetScrollPos(INT fnBar, INT nPos, BOOL fRedraw);
  373. void TxInvalidateRect(LPCRECT prc, BOOL fMode);
  374. void TxViewChange(BOOL fUpdate);
  375. BOOL TxCreateCaret(HBITMAP hbmp, INT xWidth, INT yHeight);
  376. BOOL TxShowCaret(BOOL fShow);
  377. BOOL TxSetCaretPos(INT x, INT y);
  378. BOOL TxSetTimer(UINT idTimer, UINT uTimeout);
  379. void TxKillTimer(UINT idTimer);
  380. void TxScrollWindowEx(INT dx, INT dy, LPCRECT lprcScroll, LPCRECT lprcClip,
  381. HRGN hrgnUpdate, LPRECT lprcUpdate, UINT fuScroll);
  382. void TxSetCapture(BOOL fCapture);
  383. void TxSetFocus();
  384. void TxSetCursor(HCURSOR hcur, BOOL fText);
  385. BOOL TxScreenToClient(LPPOINT lppt);
  386. BOOL TxClientToScreen(LPPOINT lppt);
  387. HRESULT TxActivate(LONG * plOldState);
  388. HRESULT TxDeactivate(LONG lNewState);
  389. HRESULT TxGetClientRect(LPRECT prc);
  390. HRESULT TxGetViewInset(LPRECT prc);
  391. HRESULT TxGetCharFormat(const CHARFORMATW **ppCF);
  392. HRESULT TxGetParaFormat(const PARAFORMAT **ppPF);
  393. COLORREF TxGetSysColor(int nIndex);
  394. HRESULT TxGetBackStyle(TXTBACKSTYLE *pstyle);
  395. HRESULT TxGetMaxLength(DWORD *plength);
  396. HRESULT TxGetScrollBars(DWORD *pdwScrollBar);
  397. HRESULT TxGetPasswordChar(TCHAR *pch);
  398. HRESULT TxGetAcceleratorPos(LONG *pcp);
  399. HRESULT TxGetExtent(LPSIZEL lpExtent);
  400. HRESULT OnTxCharFormatChange(const CHARFORMATW * pcf);
  401. HRESULT OnTxParaFormatChange(const PARAFORMAT * ppf);
  402. HRESULT TxGetPropertyBits(DWORD dwMask, DWORD *pdwBits);
  403. HRESULT TxNotify(DWORD iNotify, void *pv);
  404. XTP_HIMC TxImmGetContext();
  405. void TxImmReleaseContext(XTP_HIMC himc);
  406. HRESULT TxGetSelectionBarWidth(LONG *lSelBarWidth);
  407. END_INTERFACE_PART(TextHost)
  408. static DWORD CALLBACK RichTextCtrlCallbackIn(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG* pcb);
  409. //}}AFX_CODEJOCK_PRIVATE
  410. private:
  411. ITextServices* m_pTextService;
  412. CHARFORMATW m_charformat;
  413. PARAFORMAT m_paraformat;
  414. HMODULE m_hModule;
  415. CSize m_sizeEditMin;
  416. };
  417. AFX_INLINE ITextServices* CXTPRichRender::GetTextService() const {
  418. return m_pTextService;
  419. }
  420. #endif // !defined(__XTPRICHRENDER_H__)