От:
Andreo
Дата: 24.06.04 11:06
Оценка:
Имеется класс CMyHtmlView производный от CHtmlView. В этот вьюер загружается документ MS Word.
Вопрос: Как на С++ с использованием MFC и/или ATL реализовать вызов диалога поиска текста в документе MS Word (загружен doc-файл)?
Для примера привожу здесь реализацию функции копирования:
void CMyHtmlView::OnEditCopy()
{
HRESULT hr = E_FAIL;
DISPID dispid_Sel; //Selection property of Applicaiton object
// Get CLSID for Word.Application...
CLSID clsid;
hr = CLSIDFromProgID(L"Word.Application", &clsid);
if(FAILED(hr))
{
::MessageBox(NULL, "CLSIDFromProgID() failed", "Error", 0x10010);
return;
}
// Start Word and get IDispatch...
IDispatch *pDispApp; // Word-Application
IUnknown *pUnk;
LPOLECOMMANDTARGET lpOleCommandTarget = NULL;
if(::GetActiveObject(clsid, NULL, &pUnk) == S_OK)
{
VERIFY(pUnk->QueryInterface(IID_IDispatch,(void**) &pDispApp) == S_OK);
pUnk->Release();
}
else
{
::MessageBox(NULL, "MS Word!", "Error", 0x10010);
return;
}
//
OLECHAR FAR* szFunction;
VARIANT varResult;
DISPPARAMS dpNoArgs = {0, NULL, 0, NULL };
::VariantInit( &varResult);
// Get IDispatch* for the Selection object
szFunction = OLESTR("Selection");
hr = pDispApp->GetIDsOfNames (IID_NULL, &szFunction, 1, LOCALE_USER_DEFAULT, &dispid_Sel);
if(FAILED(hr))
{
pDispApp->Release();
return;
}
hr = pDispApp->Invoke (dispid_Sel, IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_PROPERTYGET, &dpNoArgs, &varResult,
NULL, NULL);
if(FAILED(hr))
{
pDispApp->Release();
return;
}
IDispatch *pDispSel = varResult.pdispVal;
szFunction = OLESTR("Copy");
hr = pDispSel->GetIDsOfNames (IID_NULL, &szFunction, 1, LOCALE_USER_DEFAULT, &dispid_Sel);
if(FAILED(hr))
{
pDispSel->Release();
pDispApp->Release();
return;
}
hr = pDispSel->Invoke (dispid_Sel, IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_METHOD, &dpNoArgs, &varResult,
NULL, NULL);
if(FAILED(hr))
{
pDispSel->Release();
pDispApp->Release();
return;
}
if(varResult.bVal)
{
::MessageBox(NULL, "Copy Error!", "", MB_OK);
}
pDispApp->Release();
}
void CMyHtmlView::OnEditFind()
{
????????????????????? // напишите здесь работающий код!!!
}
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить