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 int pos
= SetScrollPos(This
->hWnd
, fnBar
, nPos
, fRedraw
);
145 return (pos
? TRUE
: FALSE
);
148 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxInvalidateRect(ITextHost
*iface
, LPCRECT prc
, BOOL fMode
)
150 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
151 InvalidateRect(This
->hWnd
, prc
, fMode
);
154 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxViewChange(ITextHost
*iface
, BOOL fUpdate
)
156 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
158 UpdateWindow(This
->hWnd
);
161 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxCreateCaret(ITextHost
*iface
, HBITMAP hbmp
, INT xWidth
, INT yHeight
)
163 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
164 return CreateCaret(This
->hWnd
, hbmp
, xWidth
, yHeight
);
167 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxShowCaret(ITextHost
*iface
, BOOL fShow
)
169 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
171 return ShowCaret(This
->hWnd
);
173 return HideCaret(This
->hWnd
);
176 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxSetCaretPos(ITextHost
*iface
,
179 return SetCaretPos(x
, y
);
182 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxSetTimer(ITextHost
*iface
, UINT idTimer
, UINT uTimeout
)
184 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
185 return SetTimer(This
->hWnd
, idTimer
, uTimeout
, NULL
) != 0;
188 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxKillTimer(ITextHost
*iface
, UINT idTimer
)
190 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
191 KillTimer(This
->hWnd
, idTimer
);
194 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxScrollWindowEx(ITextHost
*iface
, INT dx
, INT dy
, LPCRECT lprcScroll
,
195 LPCRECT lprcClip
, HRGN hRgnUpdate
, LPRECT lprcUpdate
,
198 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
199 ScrollWindowEx(This
->hWnd
, dx
, dy
, lprcScroll
, lprcClip
,
200 hRgnUpdate
, lprcUpdate
, fuScroll
);
203 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxSetCapture(ITextHost
*iface
, BOOL fCapture
)
205 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
207 SetCapture(This
->hWnd
);
212 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxSetFocus(ITextHost
*iface
)
214 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
215 SetFocus(This
->hWnd
);
218 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxSetCursor(ITextHost
*iface
,
225 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxScreenToClient(ITextHost
*iface
, LPPOINT lppt
)
227 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
228 return ScreenToClient(This
->hWnd
, lppt
);
231 DECLSPEC_HIDDEN BOOL WINAPI
ITextHostImpl_TxClientToScreen(ITextHost
*iface
, LPPOINT lppt
)
233 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
234 return ClientToScreen(This
->hWnd
, lppt
);
237 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxActivate(ITextHost
*iface
, LONG
*plOldState
)
239 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
240 *plOldState
= HandleToLong(SetActiveWindow(This
->hWnd
));
241 return (*plOldState
? S_OK
: E_FAIL
);
244 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxDeactivate(ITextHost
*iface
,
247 HWND ret
= SetActiveWindow(LongToHandle(lNewState
));
248 return (ret
? S_OK
: E_FAIL
);
251 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetClientRect(ITextHost
*iface
, LPRECT prc
)
253 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
254 int ret
= GetClientRect(This
->hWnd
, prc
);
255 return (ret
? S_OK
: E_FAIL
);
258 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetViewInset(ITextHost
*iface
,
268 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetCharFormat(ITextHost
*iface
,
269 const CHARFORMATW
**ppCF
)
274 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetParaFormat(ITextHost
*iface
,
275 const PARAFORMAT
**ppPF
)
280 DECLSPEC_HIDDEN COLORREF WINAPI
ITextHostImpl_TxGetSysColor(ITextHost
*iface
,
283 return GetSysColor(nIndex
);
286 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetBackStyle(ITextHost
*iface
,
287 TXTBACKSTYLE
*pStyle
)
289 *pStyle
= TXTBACK_OPAQUE
;
293 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetMaxLength(ITextHost
*iface
,
300 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetScrollBars(ITextHost
*iface
, DWORD
*pdwScrollBar
)
302 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
303 ME_TextEditor
*editor
= (ME_TextEditor
*)GetWindowLongPtrW(This
->hWnd
, 0);
304 const DWORD mask
= WS_VSCROLL
|
311 *pdwScrollBar
= editor
->styleFlags
& mask
;
313 DWORD style
= GetWindowLongW(This
->hWnd
, GWL_STYLE
);
314 if (style
& WS_VSCROLL
)
315 style
|= ES_AUTOVSCROLL
;
316 if (!This
->bEmulateVersion10
&& (style
& WS_HSCROLL
))
317 style
|= ES_AUTOHSCROLL
;
318 *pdwScrollBar
= style
& mask
;
323 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetPasswordChar(ITextHost
*iface
,
330 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetAcceleratorPos(ITextHost
*iface
,
337 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetExtent(ITextHost
*iface
,
343 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_OnTxCharFormatChange(ITextHost
*iface
,
344 const CHARFORMATW
*pcf
)
349 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_OnTxParaFormatChange(ITextHost
*iface
,
350 const PARAFORMAT
*ppf
)
355 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetPropertyBits(ITextHost
*iface
, DWORD dwMask
, DWORD
*pdwBits
)
357 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
358 ME_TextEditor
*editor
= (ME_TextEditor
*)GetWindowLongPtrW(This
->hWnd
, 0);
364 style
= editor
->styleFlags
;
365 if (editor
->mode
& TM_RICHTEXT
)
366 dwBits
|= TXTBIT_RICHTEXT
;
367 if (editor
->bWordWrap
)
368 dwBits
|= TXTBIT_WORDWRAP
;
369 if (style
& ECO_AUTOWORDSELECTION
)
370 dwBits
|= TXTBIT_AUTOWORDSEL
;
374 style
= GetWindowLongW(This
->hWnd
, GWL_STYLE
);
375 ITextHostImpl_TxGetScrollBars(iface
, &dwScrollBar
);
377 dwBits
|= TXTBIT_RICHTEXT
|TXTBIT_AUTOWORDSEL
;
378 if (!(dwScrollBar
& ES_AUTOHSCROLL
))
379 dwBits
|= TXTBIT_WORDWRAP
;
382 /* Bits that correspond to window styles. */
383 if (style
& ES_MULTILINE
)
384 dwBits
|= TXTBIT_MULTILINE
;
385 if (style
& ES_READONLY
)
386 dwBits
|= TXTBIT_READONLY
;
387 if (style
& ES_PASSWORD
)
388 dwBits
|= TXTBIT_USEPASSWORD
;
389 if (!(style
& ES_NOHIDESEL
))
390 dwBits
|= TXTBIT_HIDESELECTION
;
391 if (style
& ES_SAVESEL
)
392 dwBits
|= TXTBIT_SAVESELECTION
;
393 if (style
& ES_VERTICAL
)
394 dwBits
|= TXTBIT_VERTICAL
;
395 if (style
& ES_NOOLEDRAGDROP
)
396 dwBits
|= TXTBIT_DISABLEDRAG
;
398 dwBits
|= TXTBIT_ALLOWBEEP
;
400 /* The following bits are always FALSE because they are probably only
401 * needed for ITextServices_OnTxPropertyBitsChange:
402 * TXTBIT_VIEWINSETCHANGE
403 * TXTBIT_BACKSTYLECHANGE
404 * TXTBIT_MAXLENGTHCHANGE
405 * TXTBIT_CHARFORMATCHANGE
406 * TXTBIT_PARAFORMATCHANGE
407 * TXTBIT_SHOWACCELERATOR
408 * TXTBIT_EXTENTCHANGE
409 * TXTBIT_SELBARCHANGE
410 * TXTBIT_SCROLLBARCHANGE
411 * TXTBIT_CLIENTRECTCHANGE
413 * Documented by MSDN as not supported:
414 * TXTBIT_USECURRENTBKG
417 *pdwBits
= dwBits
& dwMask
;
421 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxNotify(ITextHost
*iface
, DWORD iNotify
, void *pv
)
423 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
424 ME_TextEditor
*editor
= (ME_TextEditor
*)GetWindowLongPtrW(This
->hWnd
, 0);
425 HWND hwnd
= This
->hWnd
;
428 if (!editor
|| !editor
->hwndParent
) return S_OK
;
430 id
= GetWindowLongW(hwnd
, GWLP_ID
);
438 case EN_REQUESTRESIZE
:
439 case EN_SAVECLIPBOARD
:
443 /* FIXME: Verify this assumption that pv starts with NMHDR. */
448 info
->hwndFrom
= hwnd
;
450 info
->code
= iNotify
;
451 SendMessageW(editor
->hwndParent
, WM_NOTIFY
, id
, (LPARAM
)info
);
456 /* Only sent when the window is visible. */
457 if (!IsWindowVisible(hwnd
))
467 SendMessageW(editor
->hwndParent
, WM_COMMAND
, MAKEWPARAM(id
, iNotify
), (LPARAM
)hwnd
);
471 FIXME("EN_MSGFILTER is documented as not being sent to TxNotify\n");
479 DECLSPEC_HIDDEN HIMC WINAPI
ITextHostImpl_TxImmGetContext(ITextHost
*iface
)
481 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
482 return ImmGetContext(This
->hWnd
);
485 DECLSPEC_HIDDEN
void WINAPI
ITextHostImpl_TxImmReleaseContext(ITextHost
*iface
, HIMC himc
)
487 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
488 ImmReleaseContext(This
->hWnd
, himc
);
491 DECLSPEC_HIDDEN HRESULT WINAPI
ITextHostImpl_TxGetSelectionBarWidth(ITextHost
*iface
, LONG
*lSelBarWidth
)
493 ITextHostImpl
*This
= impl_from_ITextHost(iface
);
494 ME_TextEditor
*editor
= (ME_TextEditor
*)GetWindowLongPtrW(This
->hWnd
, 0);
496 DWORD style
= editor
? editor
->styleFlags
497 : GetWindowLongW(This
->hWnd
, GWL_STYLE
);
498 *lSelBarWidth
= (style
& ES_SELECTIONBAR
) ? 225 : 0; /* in HIMETRIC */
503 #ifdef __i386__ /* thiscall functions are i386-specific */
505 #define THISCALL(func) __thiscall_ ## func
506 #define DEFINE_THISCALL_WRAPPER(func,args) \
507 extern typeof(func) THISCALL(func); \
508 __ASM_STDCALL_FUNC(__thiscall_ ## func, args, \
512 "jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
516 #define THISCALL(func) func
517 #define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */
519 #endif /* __i386__ */
521 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetDC
,4)
522 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxReleaseDC
,8)
523 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxShowScrollBar
,12)
524 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxEnableScrollBar
,12)
525 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetScrollRange
,20)
526 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetScrollPos
,16)
527 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxInvalidateRect
,12)
528 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxViewChange
,8)
529 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxCreateCaret
,16)
530 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxShowCaret
,8)
531 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCaretPos
,12)
532 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetTimer
,12)
533 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxKillTimer
,8)
534 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxScrollWindowEx
,32)
535 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCapture
,8)
536 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetFocus
,4)
537 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCursor
,12)
538 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxScreenToClient
,8)
539 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxClientToScreen
,8)
540 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxActivate
,8)
541 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxDeactivate
,8)
542 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetClientRect
,8)
543 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetViewInset
,8)
544 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetCharFormat
,8)
545 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetParaFormat
,8)
546 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetSysColor
,8)
547 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetBackStyle
,8)
548 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetMaxLength
,8)
549 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetScrollBars
,8)
550 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetPasswordChar
,8)
551 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetAcceleratorPos
,8)
552 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetExtent
,8)
553 DEFINE_THISCALL_WRAPPER(ITextHostImpl_OnTxCharFormatChange
,8)
554 DEFINE_THISCALL_WRAPPER(ITextHostImpl_OnTxParaFormatChange
,8)
555 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetPropertyBits
,12)
556 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxNotify
,12)
557 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxImmGetContext
,4)
558 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxImmReleaseContext
,8)
559 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetSelectionBarWidth
,8)
561 #ifdef __i386__ /* thiscall functions are i386-specific */
563 #define STDCALL(func) __stdcall_ ## func
564 #define DEFINE_STDCALL_WRAPPER(num,func,args) \
565 extern typeof(func) __stdcall_ ## func; \
566 __ASM_STDCALL_FUNC(__stdcall_ ## func, args, \
570 "movl (%ecx), %eax\n\t" \
571 "jmp *(4*(" #num "))(%eax)" )
573 DEFINE_STDCALL_WRAPPER(3,ITextHostImpl_TxGetDC
,4)
574 DEFINE_STDCALL_WRAPPER(4,ITextHostImpl_TxReleaseDC
,8)
575 DEFINE_STDCALL_WRAPPER(5,ITextHostImpl_TxShowScrollBar
,12)
576 DEFINE_STDCALL_WRAPPER(6,ITextHostImpl_TxEnableScrollBar
,12)
577 DEFINE_STDCALL_WRAPPER(7,ITextHostImpl_TxSetScrollRange
,20)
578 DEFINE_STDCALL_WRAPPER(8,ITextHostImpl_TxSetScrollPos
,16)
579 DEFINE_STDCALL_WRAPPER(9,ITextHostImpl_TxInvalidateRect
,12)
580 DEFINE_STDCALL_WRAPPER(10,ITextHostImpl_TxViewChange
,8)
581 DEFINE_STDCALL_WRAPPER(11,ITextHostImpl_TxCreateCaret
,16)
582 DEFINE_STDCALL_WRAPPER(12,ITextHostImpl_TxShowCaret
,8)
583 DEFINE_STDCALL_WRAPPER(13,ITextHostImpl_TxSetCaretPos
,12)
584 DEFINE_STDCALL_WRAPPER(14,ITextHostImpl_TxSetTimer
,12)
585 DEFINE_STDCALL_WRAPPER(15,ITextHostImpl_TxKillTimer
,8)
586 DEFINE_STDCALL_WRAPPER(16,ITextHostImpl_TxScrollWindowEx
,32)
587 DEFINE_STDCALL_WRAPPER(17,ITextHostImpl_TxSetCapture
,8)
588 DEFINE_STDCALL_WRAPPER(18,ITextHostImpl_TxSetFocus
,4)
589 DEFINE_STDCALL_WRAPPER(19,ITextHostImpl_TxSetCursor
,12)
590 DEFINE_STDCALL_WRAPPER(20,ITextHostImpl_TxScreenToClient
,8)
591 DEFINE_STDCALL_WRAPPER(21,ITextHostImpl_TxClientToScreen
,8)
592 DEFINE_STDCALL_WRAPPER(22,ITextHostImpl_TxActivate
,8)
593 DEFINE_STDCALL_WRAPPER(23,ITextHostImpl_TxDeactivate
,8)
594 DEFINE_STDCALL_WRAPPER(24,ITextHostImpl_TxGetClientRect
,8)
595 DEFINE_STDCALL_WRAPPER(25,ITextHostImpl_TxGetViewInset
,8)
596 DEFINE_STDCALL_WRAPPER(26,ITextHostImpl_TxGetCharFormat
,8)
597 DEFINE_STDCALL_WRAPPER(27,ITextHostImpl_TxGetParaFormat
,8)
598 DEFINE_STDCALL_WRAPPER(28,ITextHostImpl_TxGetSysColor
,8)
599 DEFINE_STDCALL_WRAPPER(29,ITextHostImpl_TxGetBackStyle
,8)
600 DEFINE_STDCALL_WRAPPER(30,ITextHostImpl_TxGetMaxLength
,8)
601 DEFINE_STDCALL_WRAPPER(31,ITextHostImpl_TxGetScrollBars
,8)
602 DEFINE_STDCALL_WRAPPER(32,ITextHostImpl_TxGetPasswordChar
,8)
603 DEFINE_STDCALL_WRAPPER(33,ITextHostImpl_TxGetAcceleratorPos
,8)
604 DEFINE_STDCALL_WRAPPER(34,ITextHostImpl_TxGetExtent
,8)
605 DEFINE_STDCALL_WRAPPER(35,ITextHostImpl_OnTxCharFormatChange
,8)
606 DEFINE_STDCALL_WRAPPER(36,ITextHostImpl_OnTxParaFormatChange
,8)
607 DEFINE_STDCALL_WRAPPER(37,ITextHostImpl_TxGetPropertyBits
,12)
608 DEFINE_STDCALL_WRAPPER(38,ITextHostImpl_TxNotify
,12)
609 DEFINE_STDCALL_WRAPPER(39,ITextHostImpl_TxImmGetContext
,4)
610 DEFINE_STDCALL_WRAPPER(40,ITextHostImpl_TxImmReleaseContext
,8)
611 DEFINE_STDCALL_WRAPPER(41,ITextHostImpl_TxGetSelectionBarWidth
,8)
613 const ITextHostVtbl itextHostStdcallVtbl
= {
617 __stdcall_ITextHostImpl_TxGetDC
,
618 __stdcall_ITextHostImpl_TxReleaseDC
,
619 __stdcall_ITextHostImpl_TxShowScrollBar
,
620 __stdcall_ITextHostImpl_TxEnableScrollBar
,
621 __stdcall_ITextHostImpl_TxSetScrollRange
,
622 __stdcall_ITextHostImpl_TxSetScrollPos
,
623 __stdcall_ITextHostImpl_TxInvalidateRect
,
624 __stdcall_ITextHostImpl_TxViewChange
,
625 __stdcall_ITextHostImpl_TxCreateCaret
,
626 __stdcall_ITextHostImpl_TxShowCaret
,
627 __stdcall_ITextHostImpl_TxSetCaretPos
,
628 __stdcall_ITextHostImpl_TxSetTimer
,
629 __stdcall_ITextHostImpl_TxKillTimer
,
630 __stdcall_ITextHostImpl_TxScrollWindowEx
,
631 __stdcall_ITextHostImpl_TxSetCapture
,
632 __stdcall_ITextHostImpl_TxSetFocus
,
633 __stdcall_ITextHostImpl_TxSetCursor
,
634 __stdcall_ITextHostImpl_TxScreenToClient
,
635 __stdcall_ITextHostImpl_TxClientToScreen
,
636 __stdcall_ITextHostImpl_TxActivate
,
637 __stdcall_ITextHostImpl_TxDeactivate
,
638 __stdcall_ITextHostImpl_TxGetClientRect
,
639 __stdcall_ITextHostImpl_TxGetViewInset
,
640 __stdcall_ITextHostImpl_TxGetCharFormat
,
641 __stdcall_ITextHostImpl_TxGetParaFormat
,
642 __stdcall_ITextHostImpl_TxGetSysColor
,
643 __stdcall_ITextHostImpl_TxGetBackStyle
,
644 __stdcall_ITextHostImpl_TxGetMaxLength
,
645 __stdcall_ITextHostImpl_TxGetScrollBars
,
646 __stdcall_ITextHostImpl_TxGetPasswordChar
,
647 __stdcall_ITextHostImpl_TxGetAcceleratorPos
,
648 __stdcall_ITextHostImpl_TxGetExtent
,
649 __stdcall_ITextHostImpl_OnTxCharFormatChange
,
650 __stdcall_ITextHostImpl_OnTxParaFormatChange
,
651 __stdcall_ITextHostImpl_TxGetPropertyBits
,
652 __stdcall_ITextHostImpl_TxNotify
,
653 __stdcall_ITextHostImpl_TxImmGetContext
,
654 __stdcall_ITextHostImpl_TxImmReleaseContext
,
655 __stdcall_ITextHostImpl_TxGetSelectionBarWidth
,
658 #endif /* __i386__ */
660 static const ITextHostVtbl textHostVtbl
= {
661 ITextHostImpl_QueryInterface
,
662 ITextHostImpl_AddRef
,
663 ITextHostImpl_Release
,
664 THISCALL(ITextHostImpl_TxGetDC
),
665 THISCALL(ITextHostImpl_TxReleaseDC
),
666 THISCALL(ITextHostImpl_TxShowScrollBar
),
667 THISCALL(ITextHostImpl_TxEnableScrollBar
),
668 THISCALL(ITextHostImpl_TxSetScrollRange
),
669 THISCALL(ITextHostImpl_TxSetScrollPos
),
670 THISCALL(ITextHostImpl_TxInvalidateRect
),
671 THISCALL(ITextHostImpl_TxViewChange
),
672 THISCALL(ITextHostImpl_TxCreateCaret
),
673 THISCALL(ITextHostImpl_TxShowCaret
),
674 THISCALL(ITextHostImpl_TxSetCaretPos
),
675 THISCALL(ITextHostImpl_TxSetTimer
),
676 THISCALL(ITextHostImpl_TxKillTimer
),
677 THISCALL(ITextHostImpl_TxScrollWindowEx
),
678 THISCALL(ITextHostImpl_TxSetCapture
),
679 THISCALL(ITextHostImpl_TxSetFocus
),
680 THISCALL(ITextHostImpl_TxSetCursor
),
681 THISCALL(ITextHostImpl_TxScreenToClient
),
682 THISCALL(ITextHostImpl_TxClientToScreen
),
683 THISCALL(ITextHostImpl_TxActivate
),
684 THISCALL(ITextHostImpl_TxDeactivate
),
685 THISCALL(ITextHostImpl_TxGetClientRect
),
686 THISCALL(ITextHostImpl_TxGetViewInset
),
687 THISCALL(ITextHostImpl_TxGetCharFormat
),
688 THISCALL(ITextHostImpl_TxGetParaFormat
),
689 THISCALL(ITextHostImpl_TxGetSysColor
),
690 THISCALL(ITextHostImpl_TxGetBackStyle
),
691 THISCALL(ITextHostImpl_TxGetMaxLength
),
692 THISCALL(ITextHostImpl_TxGetScrollBars
),
693 THISCALL(ITextHostImpl_TxGetPasswordChar
),
694 THISCALL(ITextHostImpl_TxGetAcceleratorPos
),
695 THISCALL(ITextHostImpl_TxGetExtent
),
696 THISCALL(ITextHostImpl_OnTxCharFormatChange
),
697 THISCALL(ITextHostImpl_OnTxParaFormatChange
),
698 THISCALL(ITextHostImpl_TxGetPropertyBits
),
699 THISCALL(ITextHostImpl_TxNotify
),
700 THISCALL(ITextHostImpl_TxImmGetContext
),
701 THISCALL(ITextHostImpl_TxImmReleaseContext
),
702 THISCALL(ITextHostImpl_TxGetSelectionBarWidth
),