home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Internet 2000 May / MICD_2000_05.iso / CBuilder5 / INSTALL / DATA1.CAB / Program_Built_Files / Include / textserv.h < prev    next >
C/C++ Source or Header  |  2000-02-01  |  13KB  |  423 lines

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