2 * RichEdit - ITextHost implementation for windowed richedit controls
4 * Copyright 2009 by Dylan Smith
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #include "wine/port.h"
24 #define NONAMELESSSTRUCT
25 #define NONAMELESSUNION
33 #include "wine/debug.h"
36 WINE_DEFAULT_DEBUG_CHANNEL(richedit
);
38 typedef struct ITextHostImpl
{
39 ITextHost ITextHost_iface
;
42 BOOL bEmulateVersion10
;
45 static const ITextHostVtbl textHostVtbl
;
47 ITextHost
*ME_CreateTextHost(HWND hwnd
, CREATESTRUCTW
*cs
, BOOL bEmulateVersion10
)
49 ITextHostImpl
*texthost
;
50 texthost
= CoTaskMemAlloc(sizeof(*texthost
));
53 ME_TextEditor
*editor
;
55 texthost
->ITextHost_iface
.lpVtbl
= &textHostVtbl
;
57 texthost
->hWnd
= hwnd
;
58 texthost
->bEmulateVersion10
= bEmulateVersion10
;
60 editor
= ME_MakeEditor(&texthost
->ITextHost_iface
, bEmulateVersion10
);
61 editor
->exStyleFlags
= GetWindowLongW(hwnd
, GWL_EXSTYLE
);
62 editor
->styleFlags
|= GetWindowLongW(hwnd
, GWL_STYLE
) & ES_WANTRETURN
;
63 editor
->hWnd
= hwnd
; /* FIXME: Remove editor's dependence on hWnd */
64 editor
->hwndParent
= cs
->hwndParent
;
65 SetWindowLongPtrW(hwnd
, 0, (LONG_PTR
)editor
);
68 return &texthost
->ITextHost_iface
;
71 static inline ITextHostImpl
*impl_from_ITextHost(ITextHost
*iface
)
73 return CONTAINING_RECORD(iface
, ITextHostImpl
, ITextHost_iface
);
76 static HRESULT WINAPI
ITextHostImpl_QueryInterface(ITextHost
*iface
, REFIID riid
, void **ppvObject
)
78 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
80 if (IsEqualIID(riid
, &IID_IUnknown
) || IsEqualIID(riid
, &IID_ITextHost
)) {
82 ITextHost_AddRef((ITextHost
*)*ppvObject
);
86 FIXME("Unknown interface: %s\n", debugstr_guid(riid
));
90 static ULONG WINAPI
ITextHostImpl_AddRef(ITextHost
*iface
)
92 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
93 ULONG ref
= InterlockedIncrement(&This
->ref
);
97 static ULONG WINAPI
ITextHostImpl_Release(ITextHost
*iface
)
99 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
100 ULONG ref
= InterlockedDecrement(&This
->ref
);
104 SetWindowLongPtrW(This
->hWnd
, 0, 0);
110 DECLSPEC_HIDDEN HDC WINAPI
ITextHostImpl_TxGetDC(ITextHost
*iface
)
112 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
113 return GetDC(This
->hWnd
);
116 DECLSPEC_HIDDEN INT WINAPI
ITextHostImpl_TxReleaseDC(ITextHost
*iface
, HDC hdc
)
118 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
119 return ReleaseDC(This
->hWnd
, hdc
);
122 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxShowScrollBar(ITextHost
*iface
, INT fnBar
, BOOL fShow
)
124 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
125 return ShowScrollBar(This
->hWnd
, fnBar
, fShow
);
128 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxEnableScrollBar(ITextHost
*iface
, INT fuSBFlags
, INT fuArrowflags
)
130 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
131 return EnableScrollBar(This
->hWnd
, fuSBFlags
, fuArrowflags
);
134 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxSetScrollRange(ITextHost
*iface
, INT fnBar
, LONG nMinPos
, INT nMaxPos
,
137 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
138 return SetScrollRange(This
->hWnd
, fnBar
, nMinPos
, nMaxPos
, fRedraw
);
141 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxSetScrollPos(ITextHost
*iface
, INT fnBar
, INT nPos
, BOOL fRedraw
)
143 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
144 return SetScrollPos(This
->hWnd
, fnBar
, nPos
, fRedraw
) != 0;
147 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxInvalidateRect(ITextHost
*iface
, LPCRECT prc
, BOOL fMode
)
149 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
150 InvalidateRect(This
->hWnd
, prc
, fMode
);
153 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxViewChange(ITextHost
*iface
, BOOL fUpdate
)
155 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
157 UpdateWindow(This
->hWnd
);
160 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxCreateCaret(ITextHost
*iface
, HBITMAP hbmp
, INT xWidth
, INT yHeight
)
162 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
163 return CreateCaret(This
->hWnd
, hbmp
, xWidth
, yHeight
);
166 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxShowCaret(ITextHost
*iface
, BOOL fShow
)
168 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
170 return ShowCaret(This
->hWnd
);
172 return HideCaret(This
->hWnd
);
175 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxSetCaretPos(ITextHost
*iface
,
178 return SetCaretPos(x
, y
);
181 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxSetTimer(ITextHost
*iface
, UINT idTimer
, UINT uTimeout
)
183 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
184 return SetTimer(This
->hWnd
, idTimer
, uTimeout
, NULL
) != 0;
187 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxKillTimer(ITextHost
*iface
, UINT idTimer
)
189 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
190 KillTimer(This
->hWnd
, idTimer
);
193 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxScrollWindowEx(ITextHost
*iface
, INT dx
, INT dy
, LPCRECT lprcScroll
,
194 LPCRECT lprcClip
, HRGN hRgnUpdate
, LPRECT lprcUpdate
,
197 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
198 ScrollWindowEx(This
->hWnd
, dx
, dy
, lprcScroll
, lprcClip
,
199 hRgnUpdate
, lprcUpdate
, fuScroll
);
202 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxSetCapture(ITextHost
*iface
, BOOL fCapture
)
204 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
206 SetCapture(This
->hWnd
);
211 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxSetFocus(ITextHost
*iface
)
213 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
214 SetFocus(This
->hWnd
);
217 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxSetCursor(ITextHost
*iface
,
224 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxScreenToClient(ITextHost
*iface
, LPPOINT lppt
)
226 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
227 return ScreenToClient(This
->hWnd
, lppt
);
230 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxClientToScreen(ITextHost
*iface
, LPPOINT lppt
)
232 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
233 return ClientToScreen(This
->hWnd
, lppt
);
236 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxActivate(ITextHost
*iface
, LONG
*plOldState
)
238 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
239 *plOldState
= HandleToLong(SetActiveWindow(This
->hWnd
));
240 return (*plOldState
? S_OK
: E_FAIL
);
243 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxDeactivate(ITextHost
*iface
,
246 HWND ret
= SetActiveWindow(LongToHandle(lNewState
));
247 return (ret
? S_OK
: E_FAIL
);
250 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetClientRect(ITextHost
*iface
, LPRECT prc
)
252 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
253 int ret
= GetClientRect(This
->hWnd
, prc
);
254 return (ret
? S_OK
: E_FAIL
);
257 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetViewInset(ITextHost
*iface
,
267 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetCharFormat(ITextHost
*iface
,
268 const CHARFORMATW
**ppCF
)
273 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetParaFormat(ITextHost
*iface
,
274 const PARAFORMAT
**ppPF
)
279 DECLSPEC_HIDDEN COLORREF WINAPI
ITextHostImpl_TxGetSysColor(ITextHost
*iface
,
282 return GetSysColor(nIndex
);
285 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetBackStyle(ITextHost
*iface
,
286 TXTBACKSTYLE
*pStyle
)
288 *pStyle
= TXTBACK_OPAQUE
;
292 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetMaxLength(ITextHost
*iface
,
299 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetScrollBars(ITextHost
*iface
, DWORD
*pdwScrollBar
)
301 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
302 ME_TextEditor
*editor
= (ME_TextEditor
*)GetWindowLongPtrW(This
->hWnd
, 0);
303 const DWORD mask
= WS_VSCROLL
|
310 *pdwScrollBar
= editor
->styleFlags
& mask
;
312 DWORD style
= GetWindowLongW(This
->hWnd
, GWL_STYLE
);
313 if (style
& WS_VSCROLL
)
314 style
|= ES_AUTOVSCROLL
;
315 if (!This
->bEmulateVersion10
&& (style
& WS_HSCROLL
))
316 style
|= ES_AUTOHSCROLL
;
317 *pdwScrollBar
= style
& mask
;
322 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetPasswordChar(ITextHost
*iface
,
329 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetAcceleratorPos(ITextHost
*iface
,
336 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetExtent(ITextHost
*iface
,
342 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_OnTxCharFormatChange(ITextHost
*iface
,
343 const CHARFORMATW
*pcf
)
348 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_OnTxParaFormatChange(ITextHost
*iface
,
349 const PARAFORMAT
*ppf
)
354 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetPropertyBits(ITextHost
*iface
, DWORD dwMask
, DWORD
*pdwBits
)
356 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
357 ME_TextEditor
*editor
= (ME_TextEditor
*)GetWindowLongPtrW(This
->hWnd
, 0);
363 style
= editor
->styleFlags
;
364 if (editor
->mode
& TM_RICHTEXT
)
365 dwBits
|= TXTBIT_RICHTEXT
;
366 if (editor
->bWordWrap
)
367 dwBits
|= TXTBIT_WORDWRAP
;
368 if (style
& ECO_AUTOWORDSELECTION
)
369 dwBits
|= TXTBIT_AUTOWORDSEL
;
373 style
= GetWindowLongW(This
->hWnd
, GWL_STYLE
);
374 ITextHostImpl_TxGetScrollBars(iface
, &dwScrollBar
);
376 dwBits
|= TXTBIT_RICHTEXT
|TXTBIT_AUTOWORDSEL
;
377 if (!(dwScrollBar
& ES_AUTOHSCROLL
))
378 dwBits
|= TXTBIT_WORDWRAP
;
381 /* Bits that correspond to window styles. */
382 if (style
& ES_MULTILINE
)
383 dwBits
|= TXTBIT_MULTILINE
;
384 if (style
& ES_READONLY
)
385 dwBits
|= TXTBIT_READONLY
;
386 if (style
& ES_PASSWORD
)
387 dwBits
|= TXTBIT_USEPASSWORD
;
388 if (!(style
& ES_NOHIDESEL
))
389 dwBits
|= TXTBIT_HIDESELECTION
;
390 if (style
& ES_SAVESEL
)
391 dwBits
|= TXTBIT_SAVESELECTION
;
392 if (style
& ES_VERTICAL
)
393 dwBits
|= TXTBIT_VERTICAL
;
394 if (style
& ES_NOOLEDRAGDROP
)
395 dwBits
|= TXTBIT_DISABLEDRAG
;
397 dwBits
|= TXTBIT_ALLOWBEEP
;
399 /* The following bits are always FALSE because they are probably only
400 * needed for ITextServices_OnTxPropertyBitsChange:
401 * TXTBIT_VIEWINSETCHANGE
402 * TXTBIT_BACKSTYLECHANGE
403 * TXTBIT_MAXLENGTHCHANGE
404 * TXTBIT_CHARFORMATCHANGE
405 * TXTBIT_PARAFORMATCHANGE
406 * TXTBIT_SHOWACCELERATOR
407 * TXTBIT_EXTENTCHANGE
408 * TXTBIT_SELBARCHANGE
409 * TXTBIT_SCROLLBARCHANGE
410 * TXTBIT_CLIENTRECTCHANGE
412 * Documented by MSDN as not supported:
413 * TXTBIT_USECURRENTBKG
416 *pdwBits
= dwBits
& dwMask
;
420 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxNotify(ITextHost
*iface
, DWORD iNotify
, void *pv
)
422 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
423 ME_TextEditor
*editor
= (ME_TextEditor
*)GetWindowLongPtrW(This
->hWnd
, 0);
424 HWND hwnd
= This
->hWnd
;
427 if (!editor
|| !editor
->hwndParent
) return S_OK
;
429 id
= GetWindowLongW(hwnd
, GWLP_ID
);
437 case EN_REQUESTRESIZE
:
438 case EN_SAVECLIPBOARD
:
442 /* FIXME: Verify this assumption that pv starts with NMHDR. */
447 info
->hwndFrom
= hwnd
;
449 info
->code
= iNotify
;
450 SendMessageW(editor
->hwndParent
, WM_NOTIFY
, id
, (LPARAM
)info
);
455 /* Only sent when the window is visible. */
456 if (!IsWindowVisible(hwnd
))
466 SendMessageW(editor
->hwndParent
, WM_COMMAND
, MAKEWPARAM(id
, iNotify
), (LPARAM
)hwnd
);
470 FIXME("EN_MSGFILTER is documented as not being sent to TxNotify\n");
478 DECLSPEC_HIDDEN HIMC WINAPI
ITextHostImpl_TxImmGetContext(ITextHost
*iface
)
480 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
481 return ImmGetContext(This
->hWnd
);
484 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxImmReleaseContext(ITextHost
*iface
, HIMC himc
)
486 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
487 ImmReleaseContext(This
->hWnd
, himc
);
490 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetSelectionBarWidth(ITextHost
*iface
, LONG
*lSelBarWidth
)
492 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
493 ME_TextEditor
*editor
= (ME_TextEditor
*)GetWindowLongPtrW(This
->hWnd
, 0);
495 DWORD style
= editor
? editor
->styleFlags
496 : GetWindowLongW(This
->hWnd
, GWL_STYLE
);
497 *lSelBarWidth
= (style
& ES_SELECTIONBAR
) ? 225 : 0; /* in HIMETRIC */
502 #ifdef __i386__ /* thiscall functions are i386-specific */
504 #define THISCALL(func) __thiscall_ ## func
505 #define DEFINE_THISCALL_WRAPPER(func,args) \
506 extern typeof(func) THISCALL(func); \
507 __ASM_STDCALL_FUNC(__thiscall_ ## func, args, \
511 "jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
515 #define THISCALL(func) func
516 #define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */
518 #endif /* __i386__ */
520 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetDC
,4)
521 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxReleaseDC
,8)
522 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxShowScrollBar
,12)
523 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxEnableScrollBar
,12)
524 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetScrollRange
,20)
525 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetScrollPos
,16)
526 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxInvalidateRect
,12)
527 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxViewChange
,8)
528 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxCreateCaret
,16)
529 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxShowCaret
,8)
530 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCaretPos
,12)
531 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetTimer
,12)
532 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxKillTimer
,8)
533 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxScrollWindowEx
,32)
534 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCapture
,8)
535 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetFocus
,4)
536 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCursor
,12)
537 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxScreenToClient
,8)
538 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxClientToScreen
,8)
539 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxActivate
,8)
540 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxDeactivate
,8)
541 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetClientRect
,8)
542 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetViewInset
,8)
543 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetCharFormat
,8)
544 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetParaFormat
,8)
545 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetSysColor
,8)
546 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetBackStyle
,8)
547 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetMaxLength
,8)
548 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetScrollBars
,8)
549 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetPasswordChar
,8)
550 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetAcceleratorPos
,8)
551 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetExtent
,8)
552 DEFINE_THISCALL_WRAPPER(ITextHostImpl_OnTxCharFormatChange
,8)
553 DEFINE_THISCALL_WRAPPER(ITextHostImpl_OnTxParaFormatChange
,8)
554 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetPropertyBits
,12)
555 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxNotify
,12)
556 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxImmGetContext
,4)
557 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxImmReleaseContext
,8)
558 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetSelectionBarWidth
,8)
560 #ifdef __i386__ /* thiscall functions are i386-specific */
562 #define STDCALL(func) __stdcall_ ## func
563 #define DEFINE_STDCALL_WRAPPER(num,func,args) \
564 extern typeof(func) __stdcall_ ## func; \
565 __ASM_STDCALL_FUNC(__stdcall_ ## func, args, \
569 "movl (%ecx), %eax\n\t" \
570 "jmp *(4*(" #num "))(%eax)" )
572 DEFINE_STDCALL_WRAPPER(3,ITextHostImpl_TxGetDC
,4)
573 DEFINE_STDCALL_WRAPPER(4,ITextHostImpl_TxReleaseDC
,8)
574 DEFINE_STDCALL_WRAPPER(5,ITextHostImpl_TxShowScrollBar
,12)
575 DEFINE_STDCALL_WRAPPER(6,ITextHostImpl_TxEnableScrollBar
,12)
576 DEFINE_STDCALL_WRAPPER(7,ITextHostImpl_TxSetScrollRange
,20)
577 DEFINE_STDCALL_WRAPPER(8,ITextHostImpl_TxSetScrollPos
,16)
578 DEFINE_STDCALL_WRAPPER(9,ITextHostImpl_TxInvalidateRect
,12)
579 DEFINE_STDCALL_WRAPPER(10,ITextHostImpl_TxViewChange
,8)
580 DEFINE_STDCALL_WRAPPER(11,ITextHostImpl_TxCreateCaret
,16)
581 DEFINE_STDCALL_WRAPPER(12,ITextHostImpl_TxShowCaret
,8)
582 DEFINE_STDCALL_WRAPPER(13,ITextHostImpl_TxSetCaretPos
,12)
583 DEFINE_STDCALL_WRAPPER(14,ITextHostImpl_TxSetTimer
,12)
584 DEFINE_STDCALL_WRAPPER(15,ITextHostImpl_TxKillTimer
,8)
585 DEFINE_STDCALL_WRAPPER(16,ITextHostImpl_TxScrollWindowEx
,32)
586 DEFINE_STDCALL_WRAPPER(17,ITextHostImpl_TxSetCapture
,8)
587 DEFINE_STDCALL_WRAPPER(18,ITextHostImpl_TxSetFocus
,4)
588 DEFINE_STDCALL_WRAPPER(19,ITextHostImpl_TxSetCursor
,12)
589 DEFINE_STDCALL_WRAPPER(20,ITextHostImpl_TxScreenToClient
,8)
590 DEFINE_STDCALL_WRAPPER(21,ITextHostImpl_TxClientToScreen
,8)
591 DEFINE_STDCALL_WRAPPER(22,ITextHostImpl_TxActivate
,8)
592 DEFINE_STDCALL_WRAPPER(23,ITextHostImpl_TxDeactivate
,8)
593 DEFINE_STDCALL_WRAPPER(24,ITextHostImpl_TxGetClientRect
,8)
594 DEFINE_STDCALL_WRAPPER(25,ITextHostImpl_TxGetViewInset
,8)
595 DEFINE_STDCALL_WRAPPER(26,ITextHostImpl_TxGetCharFormat
,8)
596 DEFINE_STDCALL_WRAPPER(27,ITextHostImpl_TxGetParaFormat
,8)
597 DEFINE_STDCALL_WRAPPER(28,ITextHostImpl_TxGetSysColor
,8)
598 DEFINE_STDCALL_WRAPPER(29,ITextHostImpl_TxGetBackStyle
,8)
599 DEFINE_STDCALL_WRAPPER(30,ITextHostImpl_TxGetMaxLength
,8)
600 DEFINE_STDCALL_WRAPPER(31,ITextHostImpl_TxGetScrollBars
,8)
601 DEFINE_STDCALL_WRAPPER(32,ITextHostImpl_TxGetPasswordChar
,8)
602 DEFINE_STDCALL_WRAPPER(33,ITextHostImpl_TxGetAcceleratorPos
,8)
603 DEFINE_STDCALL_WRAPPER(34,ITextHostImpl_TxGetExtent
,8)
604 DEFINE_STDCALL_WRAPPER(35,ITextHostImpl_OnTxCharFormatChange
,8)
605 DEFINE_STDCALL_WRAPPER(36,ITextHostImpl_OnTxParaFormatChange
,8)
606 DEFINE_STDCALL_WRAPPER(37,ITextHostImpl_TxGetPropertyBits
,12)
607 DEFINE_STDCALL_WRAPPER(38,ITextHostImpl_TxNotify
,12)
608 DEFINE_STDCALL_WRAPPER(39,ITextHostImpl_TxImmGetContext
,4)
609 DEFINE_STDCALL_WRAPPER(40,ITextHostImpl_TxImmReleaseContext
,8)
610 DEFINE_STDCALL_WRAPPER(41,ITextHostImpl_TxGetSelectionBarWidth
,8)
612 const ITextHostVtbl itextHostStdcallVtbl
= {
616 __stdcall_ITextHostImpl_TxGetDC
,
617 __stdcall_ITextHostImpl_TxReleaseDC
,
618 __stdcall_ITextHostImpl_TxShowScrollBar
,
619 __stdcall_ITextHostImpl_TxEnableScrollBar
,
620 __stdcall_ITextHostImpl_TxSetScrollRange
,
621 __stdcall_ITextHostImpl_TxSetScrollPos
,
622 __stdcall_ITextHostImpl_TxInvalidateRect
,
623 __stdcall_ITextHostImpl_TxViewChange
,
624 __stdcall_ITextHostImpl_TxCreateCaret
,
625 __stdcall_ITextHostImpl_TxShowCaret
,
626 __stdcall_ITextHostImpl_TxSetCaretPos
,
627 __stdcall_ITextHostImpl_TxSetTimer
,
628 __stdcall_ITextHostImpl_TxKillTimer
,
629 __stdcall_ITextHostImpl_TxScrollWindowEx
,
630 __stdcall_ITextHostImpl_TxSetCapture
,
631 __stdcall_ITextHostImpl_TxSetFocus
,
632 __stdcall_ITextHostImpl_TxSetCursor
,
633 __stdcall_ITextHostImpl_TxScreenToClient
,
634 __stdcall_ITextHostImpl_TxClientToScreen
,
635 __stdcall_ITextHostImpl_TxActivate
,
636 __stdcall_ITextHostImpl_TxDeactivate
,
637 __stdcall_ITextHostImpl_TxGetClientRect
,
638 __stdcall_ITextHostImpl_TxGetViewInset
,
639 __stdcall_ITextHostImpl_TxGetCharFormat
,
640 __stdcall_ITextHostImpl_TxGetParaFormat
,
641 __stdcall_ITextHostImpl_TxGetSysColor
,
642 __stdcall_ITextHostImpl_TxGetBackStyle
,
643 __stdcall_ITextHostImpl_TxGetMaxLength
,
644 __stdcall_ITextHostImpl_TxGetScrollBars
,
645 __stdcall_ITextHostImpl_TxGetPasswordChar
,
646 __stdcall_ITextHostImpl_TxGetAcceleratorPos
,
647 __stdcall_ITextHostImpl_TxGetExtent
,
648 __stdcall_ITextHostImpl_OnTxCharFormatChange
,
649 __stdcall_ITextHostImpl_OnTxParaFormatChange
,
650 __stdcall_ITextHostImpl_TxGetPropertyBits
,
651 __stdcall_ITextHostImpl_TxNotify
,
652 __stdcall_ITextHostImpl_TxImmGetContext
,
653 __stdcall_ITextHostImpl_TxImmReleaseContext
,
654 __stdcall_ITextHostImpl_TxGetSelectionBarWidth
,
657 #endif /* __i386__ */
659 static const ITextHostVtbl textHostVtbl
= {
660 ITextHostImpl_QueryInterface
,
661 ITextHostImpl_AddRef
,
662 ITextHostImpl_Release
,
663 THISCALL(ITextHostImpl_TxGetDC
),
664 THISCALL(ITextHostImpl_TxReleaseDC
),
665 THISCALL(ITextHostImpl_TxShowScrollBar
),
666 THISCALL(ITextHostImpl_TxEnableScrollBar
),
667 THISCALL(ITextHostImpl_TxSetScrollRange
),
668 THISCALL(ITextHostImpl_TxSetScrollPos
),
669 THISCALL(ITextHostImpl_TxInvalidateRect
),
670 THISCALL(ITextHostImpl_TxViewChange
),
671 THISCALL(ITextHostImpl_TxCreateCaret
),
672 THISCALL(ITextHostImpl_TxShowCaret
),
673 THISCALL(ITextHostImpl_TxSetCaretPos
),
674 THISCALL(ITextHostImpl_TxSetTimer
),
675 THISCALL(ITextHostImpl_TxKillTimer
),
676 THISCALL(ITextHostImpl_TxScrollWindowEx
),
677 THISCALL(ITextHostImpl_TxSetCapture
),
678 THISCALL(ITextHostImpl_TxSetFocus
),
679 THISCALL(ITextHostImpl_TxSetCursor
),
680 THISCALL(ITextHostImpl_TxScreenToClient
),
681 THISCALL(ITextHostImpl_TxClientToScreen
),
682 THISCALL(ITextHostImpl_TxActivate
),
683 THISCALL(ITextHostImpl_TxDeactivate
),
684 THISCALL(ITextHostImpl_TxGetClientRect
),
685 THISCALL(ITextHostImpl_TxGetViewInset
),
686 THISCALL(ITextHostImpl_TxGetCharFormat
),
687 THISCALL(ITextHostImpl_TxGetParaFormat
),
688 THISCALL(ITextHostImpl_TxGetSysColor
),
689 THISCALL(ITextHostImpl_TxGetBackStyle
),
690 THISCALL(ITextHostImpl_TxGetMaxLength
),
691 THISCALL(ITextHostImpl_TxGetScrollBars
),
692 THISCALL(ITextHostImpl_TxGetPasswordChar
),
693 THISCALL(ITextHostImpl_TxGetAcceleratorPos
),
694 THISCALL(ITextHostImpl_TxGetExtent
),
695 THISCALL(ITextHostImpl_OnTxCharFormatChange
),
696 THISCALL(ITextHostImpl_OnTxParaFormatChange
),
697 THISCALL(ITextHostImpl_TxGetPropertyBits
),
698 THISCALL(ITextHostImpl_TxNotify
),
699 THISCALL(ITextHostImpl_TxImmGetContext
),
700 THISCALL(ITextHostImpl_TxImmReleaseContext
),
701 THISCALL(ITextHostImpl_TxGetSelectionBarWidth
),