ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

txthost.c
Go to the documentation of this file.
00001 /*
00002  * RichEdit - ITextHost implementation for windowed richedit controls
00003  *
00004  * Copyright 2009 by Dylan Smith
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the GNU Lesser General Public
00008  * License as published by the Free Software Foundation; either
00009  * version 2.1 of the License, or (at your option) any later version.
00010  *
00011  * This library is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014  * Lesser General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU Lesser General Public
00017  * License along with this library; if not, write to the Free Software
00018  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
00019  */
00020 
00021 #include "config.h"
00022 #include "wine/port.h"
00023 
00024 #define NONAMELESSSTRUCT
00025 #define NONAMELESSUNION
00026 #define COBJMACROS
00027 
00028 #include "editor.h"
00029 #include "ole2.h"
00030 #include "richole.h"
00031 #include "imm.h"
00032 #include "textserv.h"
00033 #include "wine/debug.h"
00034 #include "editstr.h"
00035 
00036 WINE_DEFAULT_DEBUG_CHANNEL(richedit);
00037 
00038 typedef struct ITextHostImpl {
00039     ITextHost ITextHost_iface;
00040     LONG ref;
00041     HWND hWnd;
00042     BOOL bEmulateVersion10;
00043 } ITextHostImpl;
00044 
00045 static const ITextHostVtbl textHostVtbl;
00046 
00047 ITextHost *ME_CreateTextHost(HWND hwnd, CREATESTRUCTW *cs, BOOL bEmulateVersion10)
00048 {
00049     ITextHostImpl *texthost;
00050     texthost = CoTaskMemAlloc(sizeof(*texthost));
00051     if (texthost)
00052     {
00053         ME_TextEditor *editor;
00054 
00055         texthost->ITextHost_iface.lpVtbl = &textHostVtbl;
00056         texthost->ref = 1;
00057         texthost->hWnd = hwnd;
00058         texthost->bEmulateVersion10 = bEmulateVersion10;
00059 
00060         editor = ME_MakeEditor(&texthost->ITextHost_iface, bEmulateVersion10);
00061         editor->exStyleFlags = GetWindowLongW(hwnd, GWL_EXSTYLE);
00062         editor->styleFlags |= GetWindowLongW(hwnd, GWL_STYLE) & ES_WANTRETURN;
00063         editor->hWnd = hwnd; /* FIXME: Remove editor's dependence on hWnd */
00064         editor->hwndParent = cs->hwndParent;
00065         SetWindowLongPtrW(hwnd, 0, (LONG_PTR)editor);
00066     }
00067 
00068     return &texthost->ITextHost_iface;
00069 }
00070 
00071 static inline ITextHostImpl *impl_from_ITextHost(ITextHost *iface)
00072 {
00073     return CONTAINING_RECORD(iface, ITextHostImpl, ITextHost_iface);
00074 }
00075 
00076 static HRESULT WINAPI ITextHostImpl_QueryInterface(ITextHost *iface, REFIID riid, void **ppvObject)
00077 {
00078     ITextHostImpl *This = impl_from_ITextHost(iface);
00079 
00080     if (IsEqualIID(riid, &IID_IUnknown) || IsEqualIID(riid, &IID_ITextHost)) {
00081         *ppvObject = This;
00082         ITextHost_AddRef((ITextHost *)*ppvObject);
00083         return S_OK;
00084     }
00085 
00086     FIXME("Unknown interface: %s\n", debugstr_guid(riid));
00087     return E_NOINTERFACE;
00088 }
00089 
00090 static ULONG WINAPI ITextHostImpl_AddRef(ITextHost *iface)
00091 {
00092     ITextHostImpl *This = impl_from_ITextHost(iface);
00093     ULONG ref = InterlockedIncrement(&This->ref);
00094     return ref;
00095 }
00096 
00097 static ULONG WINAPI ITextHostImpl_Release(ITextHost *iface)
00098 {
00099     ITextHostImpl *This = impl_from_ITextHost(iface);
00100     ULONG ref = InterlockedDecrement(&This->ref);
00101 
00102     if (!ref)
00103     {
00104         SetWindowLongPtrW(This->hWnd, 0, 0);
00105         CoTaskMemFree(This);
00106     }
00107     return ref;
00108 }
00109 
00110 DECLSPEC_HIDDEN HDC WINAPI ITextHostImpl_TxGetDC(ITextHost *iface)
00111 {
00112     ITextHostImpl *This = impl_from_ITextHost(iface);
00113     return GetDC(This->hWnd);
00114 }
00115 
00116 DECLSPEC_HIDDEN INT WINAPI ITextHostImpl_TxReleaseDC(ITextHost *iface, HDC hdc)
00117 {
00118     ITextHostImpl *This = impl_from_ITextHost(iface);
00119     return ReleaseDC(This->hWnd, hdc);
00120 }
00121 
00122 DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxShowScrollBar(ITextHost *iface, INT fnBar, BOOL fShow)
00123 {
00124     ITextHostImpl *This = impl_from_ITextHost(iface);
00125     return ShowScrollBar(This->hWnd, fnBar, fShow);
00126 }
00127 
00128 DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxEnableScrollBar(ITextHost *iface, INT fuSBFlags, INT fuArrowflags)
00129 {
00130     ITextHostImpl *This = impl_from_ITextHost(iface);
00131     return EnableScrollBar(This->hWnd, fuSBFlags, fuArrowflags);
00132 }
00133 
00134 DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxSetScrollRange(ITextHost *iface, INT fnBar, LONG nMinPos, INT nMaxPos,
00135                                            BOOL fRedraw)
00136 {
00137     ITextHostImpl *This = impl_from_ITextHost(iface);
00138     return SetScrollRange(This->hWnd, fnBar, nMinPos, nMaxPos, fRedraw);
00139 }
00140 
00141 DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxSetScrollPos(ITextHost *iface, INT fnBar, INT nPos, BOOL fRedraw)
00142 {
00143     ITextHostImpl *This = impl_from_ITextHost(iface);
00144     int pos = SetScrollPos(This->hWnd, fnBar, nPos, fRedraw);
00145     return (pos ? TRUE : FALSE);
00146 }
00147 
00148 DECLSPEC_HIDDEN void WINAPI ITextHostImpl_TxInvalidateRect(ITextHost *iface, LPCRECT prc, BOOL fMode)
00149 {
00150     ITextHostImpl *This = impl_from_ITextHost(iface);
00151     InvalidateRect(This->hWnd, prc, fMode);
00152 }
00153 
00154 DECLSPEC_HIDDEN void WINAPI ITextHostImpl_TxViewChange(ITextHost *iface, BOOL fUpdate)
00155 {
00156     ITextHostImpl *This = impl_from_ITextHost(iface);
00157     if (fUpdate)
00158         UpdateWindow(This->hWnd);
00159 }
00160 
00161 DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxCreateCaret(ITextHost *iface, HBITMAP hbmp, INT xWidth, INT yHeight)
00162 {
00163     ITextHostImpl *This = impl_from_ITextHost(iface);
00164     return CreateCaret(This->hWnd, hbmp, xWidth, yHeight);
00165 }
00166 
00167 DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxShowCaret(ITextHost *iface, BOOL fShow)
00168 {
00169     ITextHostImpl *This = impl_from_ITextHost(iface);
00170     if (fShow)
00171         return ShowCaret(This->hWnd);
00172     else
00173         return HideCaret(This->hWnd);
00174 }
00175 
00176 DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxSetCaretPos(ITextHost *iface,
00177                                         INT x, INT y)
00178 {
00179     return SetCaretPos(x, y);
00180 }
00181 
00182 DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxSetTimer(ITextHost *iface, UINT idTimer, UINT uTimeout)
00183 {
00184     ITextHostImpl *This = impl_from_ITextHost(iface);
00185     return SetTimer(This->hWnd, idTimer, uTimeout, NULL) != 0;
00186 }
00187 
00188 DECLSPEC_HIDDEN void WINAPI ITextHostImpl_TxKillTimer(ITextHost *iface, UINT idTimer)
00189 {
00190     ITextHostImpl *This = impl_from_ITextHost(iface);
00191     KillTimer(This->hWnd, idTimer);
00192 }
00193 
00194 DECLSPEC_HIDDEN void WINAPI ITextHostImpl_TxScrollWindowEx(ITextHost *iface, INT dx, INT dy, LPCRECT lprcScroll,
00195                                            LPCRECT lprcClip, HRGN hRgnUpdate, LPRECT lprcUpdate,
00196                                            UINT fuScroll)
00197 {
00198     ITextHostImpl *This = impl_from_ITextHost(iface);
00199     ScrollWindowEx(This->hWnd, dx, dy, lprcScroll, lprcClip,
00200                    hRgnUpdate, lprcUpdate, fuScroll);
00201 }
00202 
00203 DECLSPEC_HIDDEN void WINAPI ITextHostImpl_TxSetCapture(ITextHost *iface, BOOL fCapture)
00204 {
00205     ITextHostImpl *This = impl_from_ITextHost(iface);
00206     if (fCapture)
00207         SetCapture(This->hWnd);
00208     else
00209         ReleaseCapture();
00210 }
00211 
00212 DECLSPEC_HIDDEN void WINAPI ITextHostImpl_TxSetFocus(ITextHost *iface)
00213 {
00214     ITextHostImpl *This = impl_from_ITextHost(iface);
00215     SetFocus(This->hWnd);
00216 }
00217 
00218 DECLSPEC_HIDDEN void WINAPI ITextHostImpl_TxSetCursor(ITextHost *iface,
00219                                       HCURSOR hcur,
00220                                       BOOL fText)
00221 {
00222     SetCursor(hcur);
00223 }
00224 
00225 DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxScreenToClient(ITextHost *iface, LPPOINT lppt)
00226 {
00227     ITextHostImpl *This = impl_from_ITextHost(iface);
00228     return ScreenToClient(This->hWnd, lppt);
00229 }
00230 
00231 DECLSPEC_HIDDEN BOOL WINAPI ITextHostImpl_TxClientToScreen(ITextHost *iface, LPPOINT lppt)
00232 {
00233     ITextHostImpl *This = impl_from_ITextHost(iface);
00234     return ClientToScreen(This->hWnd, lppt);
00235 }
00236 
00237 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxActivate(ITextHost *iface, LONG *plOldState)
00238 {
00239     ITextHostImpl *This = impl_from_ITextHost(iface);
00240     *plOldState = HandleToLong(SetActiveWindow(This->hWnd));
00241     return (*plOldState ? S_OK : E_FAIL);
00242 }
00243 
00244 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxDeactivate(ITextHost *iface,
00245                                           LONG lNewState)
00246 {
00247     HWND ret = SetActiveWindow(LongToHandle(lNewState));
00248     return (ret ? S_OK : E_FAIL);
00249 }
00250 
00251 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetClientRect(ITextHost *iface, LPRECT prc)
00252 {
00253     ITextHostImpl *This = impl_from_ITextHost(iface);
00254     int ret = GetClientRect(This->hWnd, prc);
00255     return (ret ? S_OK : E_FAIL);
00256 }
00257 
00258 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetViewInset(ITextHost *iface,
00259                                             LPRECT prc)
00260 {
00261     prc->top = 0;
00262     prc->left = 0;
00263     prc->bottom = 0;
00264     prc->right = 0;
00265     return S_OK;
00266 }
00267 
00268 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetCharFormat(ITextHost *iface,
00269                                              const CHARFORMATW **ppCF)
00270 {
00271     return E_NOTIMPL;
00272 }
00273 
00274 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetParaFormat(ITextHost *iface,
00275                                              const PARAFORMAT **ppPF)
00276 {
00277     return E_NOTIMPL;
00278 }
00279 
00280 DECLSPEC_HIDDEN COLORREF WINAPI ITextHostImpl_TxGetSysColor(ITextHost *iface,
00281                                             int nIndex)
00282 {
00283     return GetSysColor(nIndex);
00284 }
00285 
00286 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetBackStyle(ITextHost *iface,
00287                                             TXTBACKSTYLE *pStyle)
00288 {
00289     *pStyle = TXTBACK_OPAQUE;
00290     return S_OK;
00291 }
00292 
00293 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetMaxLength(ITextHost *iface,
00294                                             DWORD *pLength)
00295 {
00296     *pLength = INFINITE;
00297     return S_OK;
00298 }
00299 
00300 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetScrollBars(ITextHost *iface, DWORD *pdwScrollBar)
00301 {
00302     ITextHostImpl *This = impl_from_ITextHost(iface);
00303     ME_TextEditor *editor = (ME_TextEditor*)GetWindowLongPtrW(This->hWnd, 0);
00304     const DWORD mask = WS_VSCROLL|
00305                        WS_HSCROLL|
00306                        ES_AUTOVSCROLL|
00307                        ES_AUTOHSCROLL|
00308                        ES_DISABLENOSCROLL;
00309     if (editor)
00310     {
00311         *pdwScrollBar = editor->styleFlags & mask;
00312     } else {
00313         DWORD style = GetWindowLongW(This->hWnd, GWL_STYLE);
00314         if (style & WS_VSCROLL)
00315             style |= ES_AUTOVSCROLL;
00316         if (!This->bEmulateVersion10 && (style & WS_HSCROLL))
00317             style |= ES_AUTOHSCROLL;
00318         *pdwScrollBar = style & mask;
00319     }
00320     return S_OK;
00321 }
00322 
00323 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetPasswordChar(ITextHost *iface,
00324                                                WCHAR *pch)
00325 {
00326     *pch = '*';
00327     return S_OK;
00328 }
00329 
00330 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetAcceleratorPos(ITextHost *iface,
00331                                                  LONG *pch)
00332 {
00333     *pch = -1;
00334     return S_OK;
00335 }
00336 
00337 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetExtent(ITextHost *iface,
00338                                          LPSIZEL lpExtent)
00339 {
00340     return E_NOTIMPL;
00341 }
00342 
00343 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_OnTxCharFormatChange(ITextHost *iface,
00344                                                   const CHARFORMATW *pcf)
00345 {
00346     return S_OK;
00347 }
00348 
00349 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_OnTxParaFormatChange(ITextHost *iface,
00350                                                   const PARAFORMAT *ppf)
00351 {
00352     return S_OK;
00353 }
00354 
00355 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetPropertyBits(ITextHost *iface, DWORD dwMask, DWORD *pdwBits)
00356 {
00357     ITextHostImpl *This = impl_from_ITextHost(iface);
00358     ME_TextEditor *editor = (ME_TextEditor *)GetWindowLongPtrW(This->hWnd, 0);
00359     DWORD style;
00360     DWORD dwBits = 0;
00361 
00362     if (editor)
00363     {
00364         style = editor->styleFlags;
00365         if (editor->mode & TM_RICHTEXT)
00366             dwBits |= TXTBIT_RICHTEXT;
00367         if (editor->bWordWrap)
00368             dwBits |= TXTBIT_WORDWRAP;
00369         if (style & ECO_AUTOWORDSELECTION)
00370             dwBits |= TXTBIT_AUTOWORDSEL;
00371     } else {
00372         DWORD dwScrollBar;
00373 
00374         style = GetWindowLongW(This->hWnd, GWL_STYLE);
00375         ITextHostImpl_TxGetScrollBars(iface, &dwScrollBar);
00376 
00377         dwBits |= TXTBIT_RICHTEXT|TXTBIT_AUTOWORDSEL;
00378         if (!(dwScrollBar & ES_AUTOHSCROLL))
00379             dwBits |= TXTBIT_WORDWRAP;
00380     }
00381 
00382     /* Bits that correspond to window styles. */
00383     if (style & ES_MULTILINE)
00384         dwBits |= TXTBIT_MULTILINE;
00385     if (style & ES_READONLY)
00386         dwBits |= TXTBIT_READONLY;
00387     if (style & ES_PASSWORD)
00388         dwBits |= TXTBIT_USEPASSWORD;
00389     if (!(style & ES_NOHIDESEL))
00390         dwBits |= TXTBIT_HIDESELECTION;
00391     if (style & ES_SAVESEL)
00392         dwBits |= TXTBIT_SAVESELECTION;
00393     if (style & ES_VERTICAL)
00394         dwBits |= TXTBIT_VERTICAL;
00395     if (style & ES_NOOLEDRAGDROP)
00396         dwBits |= TXTBIT_DISABLEDRAG;
00397 
00398     dwBits |= TXTBIT_ALLOWBEEP;
00399 
00400     /* The following bits are always FALSE because they are probably only
00401      * needed for ITextServices_OnTxPropertyBitsChange:
00402      *   TXTBIT_VIEWINSETCHANGE
00403      *   TXTBIT_BACKSTYLECHANGE
00404      *   TXTBIT_MAXLENGTHCHANGE
00405      *   TXTBIT_CHARFORMATCHANGE
00406      *   TXTBIT_PARAFORMATCHANGE
00407      *   TXTBIT_SHOWACCELERATOR
00408      *   TXTBIT_EXTENTCHANGE
00409      *   TXTBIT_SELBARCHANGE
00410      *   TXTBIT_SCROLLBARCHANGE
00411      *   TXTBIT_CLIENTRECTCHANGE
00412      *
00413      * Documented by MSDN as not supported:
00414      *   TXTBIT_USECURRENTBKG
00415      */
00416 
00417     *pdwBits = dwBits & dwMask;
00418     return S_OK;
00419 }
00420 
00421 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxNotify(ITextHost *iface, DWORD iNotify, void *pv)
00422 {
00423     ITextHostImpl *This = impl_from_ITextHost(iface);
00424     ME_TextEditor *editor = (ME_TextEditor*)GetWindowLongPtrW(This->hWnd, 0);
00425     HWND hwnd = This->hWnd;
00426     UINT id;
00427 
00428     if (!editor || !editor->hwndParent) return S_OK;
00429 
00430     id = GetWindowLongW(hwnd, GWLP_ID);
00431 
00432     switch (iNotify)
00433     {
00434         case EN_DROPFILES:
00435         case EN_LINK:
00436         case EN_OLEOPFAILED:
00437         case EN_PROTECTED:
00438         case EN_REQUESTRESIZE:
00439         case EN_SAVECLIPBOARD:
00440         case EN_SELCHANGE:
00441         case EN_STOPNOUNDO:
00442         {
00443             /* FIXME: Verify this assumption that pv starts with NMHDR. */
00444             NMHDR *info = pv;
00445             if (!info)
00446                 return E_FAIL;
00447 
00448             info->hwndFrom = hwnd;
00449             info->idFrom = id;
00450             info->code = iNotify;
00451             SendMessageW(editor->hwndParent, WM_NOTIFY, id, (LPARAM)info);
00452             break;
00453         }
00454 
00455         case EN_UPDATE:
00456             /* Only sent when the window is visible. */
00457             if (!IsWindowVisible(hwnd))
00458                 break;
00459             /* Fall through */
00460         case EN_CHANGE:
00461         case EN_ERRSPACE:
00462         case EN_HSCROLL:
00463         case EN_KILLFOCUS:
00464         case EN_MAXTEXT:
00465         case EN_SETFOCUS:
00466         case EN_VSCROLL:
00467             SendMessageW(editor->hwndParent, WM_COMMAND, MAKEWPARAM(id, iNotify), (LPARAM)hwnd);
00468             break;
00469 
00470         case EN_MSGFILTER:
00471             FIXME("EN_MSGFILTER is documented as not being sent to TxNotify\n");
00472             /* fall through */
00473         default:
00474             return E_FAIL;
00475     }
00476     return S_OK;
00477 }
00478 
00479 DECLSPEC_HIDDEN HIMC WINAPI ITextHostImpl_TxImmGetContext(ITextHost *iface)
00480 {
00481     ITextHostImpl *This = impl_from_ITextHost(iface);
00482     return ImmGetContext(This->hWnd);
00483 }
00484 
00485 DECLSPEC_HIDDEN void WINAPI ITextHostImpl_TxImmReleaseContext(ITextHost *iface, HIMC himc)
00486 {
00487     ITextHostImpl *This = impl_from_ITextHost(iface);
00488     ImmReleaseContext(This->hWnd, himc);
00489 }
00490 
00491 DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetSelectionBarWidth(ITextHost *iface, LONG *lSelBarWidth)
00492 {
00493     ITextHostImpl *This = impl_from_ITextHost(iface);
00494     ME_TextEditor *editor = (ME_TextEditor *)GetWindowLongPtrW(This->hWnd, 0);
00495 
00496     DWORD style = editor ? editor->styleFlags
00497                          : GetWindowLongW(This->hWnd, GWL_STYLE);
00498     *lSelBarWidth = (style & ES_SELECTIONBAR) ? 225 : 0; /* in HIMETRIC */
00499     return S_OK;
00500 }
00501 
00502 
00503 #ifdef __i386__  /* thiscall functions are i386-specific */
00504 
00505 #define THISCALL(func) __thiscall_ ## func
00506 #define DEFINE_THISCALL_WRAPPER(func,args) \
00507    extern typeof(func) THISCALL(func); \
00508    __ASM_STDCALL_FUNC(__thiscall_ ## func, args, \
00509                    "popl %eax\n\t" \
00510                    "pushl %ecx\n\t" \
00511                    "pushl %eax\n\t" \
00512                    "jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
00513 
00514 #else /* __i386__ */
00515 
00516 #define THISCALL(func) func
00517 #define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */
00518 
00519 #endif /* __i386__ */
00520 
00521 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetDC,4)
00522 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxReleaseDC,8)
00523 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxShowScrollBar,12)
00524 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxEnableScrollBar,12)
00525 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetScrollRange,20)
00526 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetScrollPos,16)
00527 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxInvalidateRect,12)
00528 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxViewChange,8)
00529 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxCreateCaret,16)
00530 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxShowCaret,8)
00531 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCaretPos,12)
00532 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetTimer,12)
00533 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxKillTimer,8)
00534 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxScrollWindowEx,32)
00535 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCapture,8)
00536 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetFocus,4)
00537 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxSetCursor,12)
00538 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxScreenToClient,8)
00539 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxClientToScreen,8)
00540 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxActivate,8)
00541 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxDeactivate,8)
00542 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetClientRect,8)
00543 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetViewInset,8)
00544 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetCharFormat,8)
00545 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetParaFormat,8)
00546 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetSysColor,8)
00547 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetBackStyle,8)
00548 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetMaxLength,8)
00549 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetScrollBars,8)
00550 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetPasswordChar,8)
00551 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetAcceleratorPos,8)
00552 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetExtent,8)
00553 DEFINE_THISCALL_WRAPPER(ITextHostImpl_OnTxCharFormatChange,8)
00554 DEFINE_THISCALL_WRAPPER(ITextHostImpl_OnTxParaFormatChange,8)
00555 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetPropertyBits,12)
00556 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxNotify,12)
00557 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxImmGetContext,4)
00558 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxImmReleaseContext,8)
00559 DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetSelectionBarWidth,8)
00560 
00561 #ifdef __i386__  /* thiscall functions are i386-specific */
00562 
00563 #define STDCALL(func) __stdcall_ ## func
00564 #define DEFINE_STDCALL_WRAPPER(num,func,args) \
00565    extern typeof(func) __stdcall_ ## func; \
00566    __ASM_STDCALL_FUNC(__stdcall_ ## func, args, \
00567                    "popl %eax\n\t" \
00568                    "popl %ecx\n\t" \
00569                    "pushl %eax\n\t" \
00570                    "movl (%ecx), %eax\n\t" \
00571                    "jmp *(4*(" #num "))(%eax)" )
00572 
00573 DEFINE_STDCALL_WRAPPER(3,ITextHostImpl_TxGetDC,4)
00574 DEFINE_STDCALL_WRAPPER(4,ITextHostImpl_TxReleaseDC,8)
00575 DEFINE_STDCALL_WRAPPER(5,ITextHostImpl_TxShowScrollBar,12)
00576 DEFINE_STDCALL_WRAPPER(6,ITextHostImpl_TxEnableScrollBar,12)
00577 DEFINE_STDCALL_WRAPPER(7,ITextHostImpl_TxSetScrollRange,20)
00578 DEFINE_STDCALL_WRAPPER(8,ITextHostImpl_TxSetScrollPos,16)
00579 DEFINE_STDCALL_WRAPPER(9,ITextHostImpl_TxInvalidateRect,12)
00580 DEFINE_STDCALL_WRAPPER(10,ITextHostImpl_TxViewChange,8)
00581 DEFINE_STDCALL_WRAPPER(11,ITextHostImpl_TxCreateCaret,16)
00582 DEFINE_STDCALL_WRAPPER(12,ITextHostImpl_TxShowCaret,8)
00583 DEFINE_STDCALL_WRAPPER(13,ITextHostImpl_TxSetCaretPos,12)
00584 DEFINE_STDCALL_WRAPPER(14,ITextHostImpl_TxSetTimer,12)
00585 DEFINE_STDCALL_WRAPPER(15,ITextHostImpl_TxKillTimer,8)
00586 DEFINE_STDCALL_WRAPPER(16,ITextHostImpl_TxScrollWindowEx,32)
00587 DEFINE_STDCALL_WRAPPER(17,ITextHostImpl_TxSetCapture,8)
00588 DEFINE_STDCALL_WRAPPER(18,ITextHostImpl_TxSetFocus,4)
00589 DEFINE_STDCALL_WRAPPER(19,ITextHostImpl_TxSetCursor,12)
00590 DEFINE_STDCALL_WRAPPER(20,ITextHostImpl_TxScreenToClient,8)
00591 DEFINE_STDCALL_WRAPPER(21,ITextHostImpl_TxClientToScreen,8)
00592 DEFINE_STDCALL_WRAPPER(22,ITextHostImpl_TxActivate,8)
00593 DEFINE_STDCALL_WRAPPER(23,ITextHostImpl_TxDeactivate,8)
00594 DEFINE_STDCALL_WRAPPER(24,ITextHostImpl_TxGetClientRect,8)
00595 DEFINE_STDCALL_WRAPPER(25,ITextHostImpl_TxGetViewInset,8)
00596 DEFINE_STDCALL_WRAPPER(26,ITextHostImpl_TxGetCharFormat,8)
00597 DEFINE_STDCALL_WRAPPER(27,ITextHostImpl_TxGetParaFormat,8)
00598 DEFINE_STDCALL_WRAPPER(28,ITextHostImpl_TxGetSysColor,8)
00599 DEFINE_STDCALL_WRAPPER(29,ITextHostImpl_TxGetBackStyle,8)
00600 DEFINE_STDCALL_WRAPPER(30,ITextHostImpl_TxGetMaxLength,8)
00601 DEFINE_STDCALL_WRAPPER(31,ITextHostImpl_TxGetScrollBars,8)
00602 DEFINE_STDCALL_WRAPPER(32,ITextHostImpl_TxGetPasswordChar,8)
00603 DEFINE_STDCALL_WRAPPER(33,ITextHostImpl_TxGetAcceleratorPos,8)
00604 DEFINE_STDCALL_WRAPPER(34,ITextHostImpl_TxGetExtent,8)
00605 DEFINE_STDCALL_WRAPPER(35,ITextHostImpl_OnTxCharFormatChange,8)
00606 DEFINE_STDCALL_WRAPPER(36,ITextHostImpl_OnTxParaFormatChange,8)
00607 DEFINE_STDCALL_WRAPPER(37,ITextHostImpl_TxGetPropertyBits,12)
00608 DEFINE_STDCALL_WRAPPER(38,ITextHostImpl_TxNotify,12)
00609 DEFINE_STDCALL_WRAPPER(39,ITextHostImpl_TxImmGetContext,4)
00610 DEFINE_STDCALL_WRAPPER(40,ITextHostImpl_TxImmReleaseContext,8)
00611 DEFINE_STDCALL_WRAPPER(41,ITextHostImpl_TxGetSelectionBarWidth,8)
00612 
00613 const ITextHostVtbl itextHostStdcallVtbl = {
00614     NULL,
00615     NULL,
00616     NULL,
00617     __stdcall_ITextHostImpl_TxGetDC,
00618     __stdcall_ITextHostImpl_TxReleaseDC,
00619     __stdcall_ITextHostImpl_TxShowScrollBar,
00620     __stdcall_ITextHostImpl_TxEnableScrollBar,
00621     __stdcall_ITextHostImpl_TxSetScrollRange,
00622     __stdcall_ITextHostImpl_TxSetScrollPos,
00623     __stdcall_ITextHostImpl_TxInvalidateRect,
00624     __stdcall_ITextHostImpl_TxViewChange,
00625     __stdcall_ITextHostImpl_TxCreateCaret,
00626     __stdcall_ITextHostImpl_TxShowCaret,
00627     __stdcall_ITextHostImpl_TxSetCaretPos,
00628     __stdcall_ITextHostImpl_TxSetTimer,
00629     __stdcall_ITextHostImpl_TxKillTimer,
00630     __stdcall_ITextHostImpl_TxScrollWindowEx,
00631     __stdcall_ITextHostImpl_TxSetCapture,
00632     __stdcall_ITextHostImpl_TxSetFocus,
00633     __stdcall_ITextHostImpl_TxSetCursor,
00634     __stdcall_ITextHostImpl_TxScreenToClient,
00635     __stdcall_ITextHostImpl_TxClientToScreen,
00636     __stdcall_ITextHostImpl_TxActivate,
00637     __stdcall_ITextHostImpl_TxDeactivate,
00638     __stdcall_ITextHostImpl_TxGetClientRect,
00639     __stdcall_ITextHostImpl_TxGetViewInset,
00640     __stdcall_ITextHostImpl_TxGetCharFormat,
00641     __stdcall_ITextHostImpl_TxGetParaFormat,
00642     __stdcall_ITextHostImpl_TxGetSysColor,
00643     __stdcall_ITextHostImpl_TxGetBackStyle,
00644     __stdcall_ITextHostImpl_TxGetMaxLength,
00645     __stdcall_ITextHostImpl_TxGetScrollBars,
00646     __stdcall_ITextHostImpl_TxGetPasswordChar,
00647     __stdcall_ITextHostImpl_TxGetAcceleratorPos,
00648     __stdcall_ITextHostImpl_TxGetExtent,
00649     __stdcall_ITextHostImpl_OnTxCharFormatChange,
00650     __stdcall_ITextHostImpl_OnTxParaFormatChange,
00651     __stdcall_ITextHostImpl_TxGetPropertyBits,
00652     __stdcall_ITextHostImpl_TxNotify,
00653     __stdcall_ITextHostImpl_TxImmGetContext,
00654     __stdcall_ITextHostImpl_TxImmReleaseContext,
00655     __stdcall_ITextHostImpl_TxGetSelectionBarWidth,
00656 };
00657 
00658 #endif /* __i386__ */
00659 
00660 static const ITextHostVtbl textHostVtbl = {
00661     ITextHostImpl_QueryInterface,
00662     ITextHostImpl_AddRef,
00663     ITextHostImpl_Release,
00664     THISCALL(ITextHostImpl_TxGetDC),
00665     THISCALL(ITextHostImpl_TxReleaseDC),
00666     THISCALL(ITextHostImpl_TxShowScrollBar),
00667     THISCALL(ITextHostImpl_TxEnableScrollBar),
00668     THISCALL(ITextHostImpl_TxSetScrollRange),
00669     THISCALL(ITextHostImpl_TxSetScrollPos),
00670     THISCALL(ITextHostImpl_TxInvalidateRect),
00671     THISCALL(ITextHostImpl_TxViewChange),
00672     THISCALL(ITextHostImpl_TxCreateCaret),
00673     THISCALL(ITextHostImpl_TxShowCaret),
00674     THISCALL(ITextHostImpl_TxSetCaretPos),
00675     THISCALL(ITextHostImpl_TxSetTimer),
00676     THISCALL(ITextHostImpl_TxKillTimer),
00677     THISCALL(ITextHostImpl_TxScrollWindowEx),
00678     THISCALL(ITextHostImpl_TxSetCapture),
00679     THISCALL(ITextHostImpl_TxSetFocus),
00680     THISCALL(ITextHostImpl_TxSetCursor),
00681     THISCALL(ITextHostImpl_TxScreenToClient),
00682     THISCALL(ITextHostImpl_TxClientToScreen),
00683     THISCALL(ITextHostImpl_TxActivate),
00684     THISCALL(ITextHostImpl_TxDeactivate),
00685     THISCALL(ITextHostImpl_TxGetClientRect),
00686     THISCALL(ITextHostImpl_TxGetViewInset),
00687     THISCALL(ITextHostImpl_TxGetCharFormat),
00688     THISCALL(ITextHostImpl_TxGetParaFormat),
00689     THISCALL(ITextHostImpl_TxGetSysColor),
00690     THISCALL(ITextHostImpl_TxGetBackStyle),
00691     THISCALL(ITextHostImpl_TxGetMaxLength),
00692     THISCALL(ITextHostImpl_TxGetScrollBars),
00693     THISCALL(ITextHostImpl_TxGetPasswordChar),
00694     THISCALL(ITextHostImpl_TxGetAcceleratorPos),
00695     THISCALL(ITextHostImpl_TxGetExtent),
00696     THISCALL(ITextHostImpl_OnTxCharFormatChange),
00697     THISCALL(ITextHostImpl_OnTxParaFormatChange),
00698     THISCALL(ITextHostImpl_TxGetPropertyBits),
00699     THISCALL(ITextHostImpl_TxNotify),
00700     THISCALL(ITextHostImpl_TxImmGetContext),
00701     THISCALL(ITextHostImpl_TxImmReleaseContext),
00702     THISCALL(ITextHostImpl_TxGetSelectionBarWidth),
00703 };

Generated on Sat May 26 2012 04:24:32 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.