Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RichEdit и Ole без MFC, Что нужно сделать, чтобы работало? 
:(
    Опции темы
Allest
Дата 16.7.2003, 11:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нужен Help по теме

  Вверх
Allest
Дата 17.7.2003, 15:30 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нашел
  Вверх
Step
Дата 17.7.2003, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



поделись


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Baa
Дата 17.7.2003, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Step, msdn wink.gif


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Step
Дата 18.7.2003, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



Baa там же на английском, а форум на русском smile.gif


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Allest
Дата 18.7.2003, 11:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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;
}

  Вверх
Step
Дата 18.7.2003, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



круто


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.