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