2 * Wordpad implementation - Richedit OLE callback implementation
4 * Copyright 2010 by Dylan Smith <dylan.ah.smith@gmail.com>
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
23 #define WIN32_NO_STATUS
24 #define WIN32_LEAN_AND_MEAN
28 #include <wine/debug.h>
32 WINE_DEFAULT_DEBUG_CHANNEL(wordpad
);
34 struct IRichEditOleCallbackImpl
{
35 const IRichEditOleCallbackVtbl
*vtbl
;
40 struct IRichEditOleCallbackImpl olecallback
;
42 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_QueryInterface(
43 IRichEditOleCallback
* This
,
47 WINE_TRACE("(%p, %s, %p)\n", This
, wine_dbgstr_guid(riid
), ppvObject
);
48 if (IsEqualIID(riid
, &IID_IUnknown
) || IsEqualIID(riid
, &IID_IRichEditOleCallback
))
53 WINE_FIXME("Unknown interface: %s\n", wine_dbgstr_guid(riid
));
57 static ULONG STDMETHODCALLTYPE
RichEditOleCallback_AddRef(
58 IRichEditOleCallback
* This
)
60 WINE_TRACE("(%p)\n", This
);
65 static ULONG STDMETHODCALLTYPE
RichEditOleCallback_Release(
66 IRichEditOleCallback
* This
)
68 WINE_TRACE("(%p)\n", This
);
72 /*** IRichEditOleCallback methods ***/
73 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_GetNewStorage(
74 IRichEditOleCallback
* This
,
78 static const WCHAR
template[] = {'R','E','O','L','E','_','%','u','\0'};
80 WINE_TRACE("(%p, %p)\n", This
, lplpstg
);
81 wsprintfW(name
, template, olecallback
.item_num
++);
82 return IStorage_CreateStorage(olecallback
.stg
, name
,
83 STGM_READWRITE
| STGM_SHARE_EXCLUSIVE
| STGM_CREATE
,
87 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_GetInPlaceContext(
88 IRichEditOleCallback
* This
,
89 LPOLEINPLACEFRAME
*lplpFrame
,
90 LPOLEINPLACEUIWINDOW
*lplpDoc
,
91 LPOLEINPLACEFRAMEINFO lpFrameInfo
)
93 WINE_FIXME("(%p, %p, %p, %p) stub\n", This
, lplpFrame
, lplpDoc
, lpFrameInfo
);
97 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_ShowContainerUI(
98 IRichEditOleCallback
* This
,
101 WINE_TRACE("(%p, %d)\n", This
, fShow
);
105 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_QueryInsertObject(
106 IRichEditOleCallback
* This
,
111 WINE_TRACE("(%p, %p, %p, %d)\n", This
, lpclsid
, lpstg
, cp
);
115 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_DeleteObject(
116 IRichEditOleCallback
* This
,
117 LPOLEOBJECT lpoleobj
)
119 WINE_TRACE("(%p, %p)\n", This
, lpoleobj
);
123 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_QueryAcceptData(
124 IRichEditOleCallback
* This
,
125 LPDATAOBJECT lpdataobj
,
126 CLIPFORMAT
*lpcfFormat
,
131 WINE_TRACE("(%p, %p, %p, %x, %d, %p)\n",
132 This
, lpdataobj
, lpcfFormat
, reco
, fReally
, hMetaPict
);
136 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_ContextSensitiveHelp(
137 IRichEditOleCallback
* This
,
140 WINE_TRACE("(%p, %d)\n", This
, fEnterMode
);
144 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_GetClipboardData(
145 IRichEditOleCallback
* This
,
148 LPDATAOBJECT
*lplpdataobj
)
150 WINE_TRACE("(%p, %p, %x, %p)\n", This
, lpchrg
, reco
, lplpdataobj
);
154 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_GetDragDropEffect(
155 IRichEditOleCallback
* This
,
160 WINE_TRACE("(%p, %d, %x, %p)\n", This
, fDrag
, grfKeyState
, pdwEffect
);
162 *pdwEffect
= DROPEFFECT_COPY
;
166 static HRESULT STDMETHODCALLTYPE
RichEditOleCallback_GetContextMenu(
167 IRichEditOleCallback
* This
,
169 LPOLEOBJECT lpoleobj
,
173 HINSTANCE hInstance
= GetModuleHandleW(0);
174 HMENU hPopupMenu
= LoadMenuW(hInstance
, MAKEINTRESOURCEW(IDM_POPUP
));
176 WINE_TRACE("(%p, %x, %p, %p, %p)\n",
177 This
, seltype
, lpoleobj
, lpchrg
, lphmenu
);
179 *lphmenu
= GetSubMenu(hPopupMenu
, 0);
183 struct IRichEditOleCallbackVtbl olecallbackVtbl
= {
184 RichEditOleCallback_QueryInterface
,
185 RichEditOleCallback_AddRef
,
186 RichEditOleCallback_Release
,
187 RichEditOleCallback_GetNewStorage
,
188 RichEditOleCallback_GetInPlaceContext
,
189 RichEditOleCallback_ShowContainerUI
,
190 RichEditOleCallback_QueryInsertObject
,
191 RichEditOleCallback_DeleteObject
,
192 RichEditOleCallback_QueryAcceptData
,
193 RichEditOleCallback_ContextSensitiveHelp
,
194 RichEditOleCallback_GetClipboardData
,
195 RichEditOleCallback_GetDragDropEffect
,
196 RichEditOleCallback_GetContextMenu
199 struct IRichEditOleCallbackImpl olecallback
= {
200 &olecallbackVtbl
, NULL
, 0
203 HRESULT
setup_richedit_olecallback(HWND hEditorWnd
)
205 HRESULT hr
= StgCreateDocfile(NULL
,
206 STGM_READWRITE
| STGM_SHARE_EXCLUSIVE
| STGM_DELETEONRELEASE
,
207 0, &olecallback
.stg
);
209 SendMessageW(hEditorWnd
, EM_SETOLECALLBACK
, 0, (LPARAM
)&olecallback
);