Unregistered
|
Вот основной код для Ole Если есть ошибки, пишите // code.h| Код | #include "olestd.h" #include <richedit.h> #include <richole.h>
typedef struct _itpcall { LPVOID *lpVtbl;// Virtual table ULONG cRef; // Reference count LPSTORAGE pstg; INT iRefereceCount, iObjectCount; } ITPCALL;
BOOL CreateRichEdit(); ITPCALL * ITPCALL_New(LPSTORAGE lpstg);
HRESULT STDMETHODCALLTYPE comQueryInterface (ITPCALL *pitpcall, REFIID riid,ITPCALL ** ppvObject); ULONG STDMETHODCALLTYPE comAddRef (ITPCALL *pitpcall); ULONG STDMETHODCALLTYPE comRelease (ITPCALL *pitpcall); HRESULT STDMETHODCALLTYPE comGetNewStorage (ITPCALL *pitpcall, LPSTORAGE FAR * lplpStorage); HRESULT STDMETHODCALLTYPE comGetInPlaceContext (ITPCALL *pitpcall,LPOLEINPLACEFRAME FAR * lplpFrame,LPOLEINPLACEUIWINDOW FAR * lplpDoc,LPOLEINPLACEFRAMEINFO lpFrameInfo); HRESULT STDMETHODCALLTYPE comShowContainerUI (ITPCALL *pitpcall,BOOL fShow); HRESULT STDMETHODCALLTYPE comQueryInsertObject (ITPCALL *pitpcall,LPCLSID lpCLSID,LPSTORAGE lpStorage,LONG cp); HRESULT STDMETHODCALLTYPE comDeleteObject (ITPCALL *pitpcall,LPOLEOBJECT lpOLEObject); HRESULT STDMETHODCALLTYPE comQueryAcceptData (ITPCALL *pitpcall,LPDATAOBJECT lpDataObject,CLIPFORMAT FAR * lpClipFormat,DWORD reco,BOOL fReally,HGLOBAL hMetaPict); HRESULT STDMETHODCALLTYPE comContextSensitiveHelp (ITPCALL *pitpcall,BOOL fEnterMode); HRESULT STDMETHODCALLTYPE comGetClipboardData (ITPCALL *pitpcall,CHARRANGE FAR * lpCharRange,DWORD reco,LPDATAOBJECT FAR * lplpDataObject); HRESULT STDMETHODCALLTYPE comGetDragDropEffect (ITPCALL *pitpcall,BOOL fDrag,DWORD grfKeyState,LPDWORD lpEffect); HRESULT STDMETHODCALLTYPE comGetContextMenu (ITPCALL *pitpcall,WORD selectionType,LPOLEOBJECT lpOLEObject,CHARRANGE FAR * lpCharRange,HMENU FAR * lphmenu);
static LPVOID ITPCALL_Vtbl[] = { (LPVOID) comQueryInterface, (LPVOID) comAddRef, (LPVOID) comRelease, (LPVOID) comGetNewStorage, (LPVOID) comGetInPlaceContext, (LPVOID) comShowContainerUI, (LPVOID) comQueryInsertObject, (LPVOID) comDeleteObject, (LPVOID) comQueryAcceptData, (LPVOID) comContextSensitiveHelp, (LPVOID) comGetClipboardData, (LPVOID) comGetDragDropEffect, (LPVOID) comGetContextMenu, }; static LPSTORAGE m_pstg; static ITPCALL *m_pitpcall;
| // code.cpp| Код | //------------------------------------------------------------- BOOL CreateRichEdit() { HWND hwndRE; if (hwndRE= Create(WS_EX_CLIENTEDGE, TEXT("RichEdit20A"), NULL, (WS_CHILDWINDOW | WS_CLIPSIBLINGS | WS_VSCROLL | WS_TABSTOP | ES_AUTOVSCROLL | ES_MULTILINE | ES_READONLY | ES_OEMCONVERT | ES_SAVESEL), 0, 0, 0, 0, hwndParent, (HMENU)IDC_RICHEDIT, g_hInstance, 0)) { // Code if (!(m_pstg = OleStdCreateRootStorage(NULL, STGM_SHARE_EXCLUSIVE))) { MessageBox(hwndParent, "No storage!", "Error", MB_OK | MB_ICONEXCLAMATION); fRes = FALSE; } else { if (!(m_pitpcall = ITPCALL_New(m_pstg))) { MessageBox(hwndParent, "No callback object!", "Error", MB_OK | MB_ICONEXCLAMATION); fRes = FALSE; } else SendMessage(hwndRE, EM_SETOLECALLBACK, 0, (LPARAM)m_pitpcall); } } } //------------------------------------------------------------- ITPCALL * ITPCALL_New(LPSTORAGE lpstg) { // Local variables ITPCALL * pitpcall = NULL; // Code pitpcall = new ITPCALL; if (pitpcall == NULL) return NULL; pitpcall->lpVtbl = ITPCALL_Vtbl; pitpcall->cRef = 1;// Start with one reference pitpcall->pstg = lpstg;
return pitpcall; } //------------------------------------------------------------- STDAPI_(LPSTORAGE) OleStdCreateRootStorage(LPOLESTR lpszStgName, DWORD grfMode) { // Local variables HRESULT hr; DWORD grfCreateMode = STGM_READWRITE | STGM_TRANSACTED; DWORD reserved = 0; LPSTORAGE lpRootStg;
// Code if (!lpszStgName) grfCreateMode |= STGM_DELETEONRELEASE;
hr = StgCreateDocfile(lpszStgName, grfMode | grfCreateMode, reserved, (LPSTORAGE FAR*)&lpRootStg);
if (hr == NOERROR) return lpRootStg; // existing file successfully opened
return NULL; } //------------------------------------------------------------- STDAPI_(LPSTORAGE) OleStdCreateChildStorage(LPSTORAGE lpStg, LPOLESTR lpszStgName) { // Code if (lpStg != NULL) { // Local variblaes LPSTORAGE lpChildStg; DWORD grfMode = (STGM_READWRITE | STGM_TRANSACTED | STGM_SHARE_EXCLUSIVE); DWORD reserved = 0;
// Code HRESULT hrErr = lpStg->CreateStorage(lpszStgName, grfMode, reserved, reserved, (LPSTORAGE FAR*)&lpChildStg); if (hrErr == NOERROR) return lpChildStg; } return NULL; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comQueryInterface (ITPCALL *pitpcall, REFIID riid, ITPCALL ** ppvObject) { // Local variblaes SCODE sc = S_OK; // Code if (IsEqualGUID(riid,IID_IUnknown)) { comAddRef(*ppvObject = pitpcall); } else { if(IsEqualGUID(riid,IID_IRichEditOleCallback)) { comAddRef(*ppvObject = pitpcall); } else { sc = E_NOINTERFACE; *ppvObject = NULL; } } return sc; } //------------------------------------------------------------- ULONG STDMETHODCALLTYPE comAddRef (ITPCALL *pitpcall) { // Code return ++pitpcall->iRefereceCount; } //------------------------------------------------------------- ULONG STDMETHODCALLTYPE comRelease (ITPCALL *pitpcall) { // Code return S_OK; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comGetNewStorage (ITPCALL *pitpcall, LPSTORAGE FAR * lplpStorage) { // Local variables SCODE sc = S_OK; WCHAR szItemW[32];
// Code wsprintfW(szItemW, L"REOBJ%ld", ++pitpcall->iObjectCount); if (pitpcall->pstg == NULL) pitpcall->pstg = OleStdCreateRootStorage(NULL, STGM_SHARE_EXCLUSIVE); if (!(*lplpStorage = OleStdCreateChildStorage(pitpcall->pstg, szItemW))) sc = E_FAIL;
return sc; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comGetInPlaceContext (ITPCALL *pitpcall, LPOLEINPLACEFRAME FAR * lplpFrame, LPOLEINPLACEUIWINDOW FAR * lplpDoc, LPOLEINPLACEFRAMEINFO lpFrameInfo) { // Code return E_NOTIMPL; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comShowContainerUI (ITPCALL *pitpcall, BOOL fShow) { // Code return E_NOTIMPL; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comQueryInsertObject (ITPCALL *pitpcall, LPCLSID lpCLSID, LPSTORAGE lpStorage, LONG cp) { // Code return NOERROR; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comDeleteObject (ITPCALL *pitpcall, LPOLEOBJECT lpOLEObject) { // Code return E_NOTIMPL; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comQueryAcceptData (ITPCALL *pitpcall, LPDATAOBJECT lpDataObject, CLIPFORMAT FAR * lpClipFormat, DWORD reco, BOOL fReally, HGLOBAL hMetaPict) { // Code return NOERROR; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comContextSensitiveHelp (ITPCALL *pitpcall, BOOL fEnterMode) { // Code return E_NOTIMPL; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comGetClipboardData (ITPCALL *pitpcall, CHARRANGE FAR * lpCharRange, DWORD reco, LPDATAOBJECT FAR * lplpDataObject) { // Code return E_NOTIMPL; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comGetDragDropEffect (ITPCALL *pitpcall, BOOL fDrag, DWORD grfKeyState, LPDWORD lpEffect) { // Code return E_NOTIMPL; } //------------------------------------------------------------- HRESULT STDMETHODCALLTYPE comGetContextMenu (ITPCALL *pitpcall, WORD selectionType, LPOLEOBJECT lpOLEObject, CHARRANGE FAR * lpCharRange, HMENU FAR * lphmenu) { // Code return E_NOTIMPL; }
|
|