Re: CHtmlView copy/paste
От: Аноним  
Дата: 11.10.02 15:26
Оценка:
Здравствуйте Fraggle, Вы писали:

F>Подскажите, плз, как для объекта CHtmlView вызвать обработчики работы с клипбордом?


F>Т.е. есть объект, приходит событие — юзер нажал Cut или Copy — и нужно это довести до сведения CHtmlView.


Определяем в CHtmlView такие фукции:

    afx_msg void OnEditCopy();
    afx_msg void OnUpdateEditCopy(CCmdUI* pCmdUI);
    afx_msg void OnEditCut();
    afx_msg void OnUpdateEditCut(CCmdUI* pCmdUI);
    afx_msg void OnEditPaste();
    afx_msg void OnUpdateEditPaste(CCmdUI* pCmdUI);


Далее:


BEGIN_MESSAGE_MAP(CMyHtmlView, CHtmlView)
    //{{AFX_MSG_MAP(CMyHtmlView)
    ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
    ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
    ON_COMMAND(ID_EDIT_CUT, OnEditCut)
    ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
    ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
    ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)


Ну собственно реализация методов:


HRESULT CMyHtmlView::ExecFormCommand(const GUID *pGuid, long cmdID, long cmdExecOpt,
                                     VARIANT* pInVar, VARIANT* pOutVar) const
{
    CComQIPtr<IHTMLDocument2> spDoc(GetHtmlDocument());
    HRESULT hr = E_FAIL;

    if (spDoc)
    {
        CComQIPtr<IOleCommandTarget> spCmdTarg = spDoc;
        if (spCmdTarg)
        {
            hr = spCmdTarg->Exec(pGuid, cmdID, cmdExecOpt, pInVar , pOutVar);
        }
        else
            hr = E_NOINTERFACE;
    }

    return hr;
}

HRESULT CMyHtmlView::ExecFormCommand(long cmdID, long cmdExecOpt,
                                            VARIANT* pInVar, VARIANT* pOutVar) const
{
    return ExecFormCommand(&CGID_MSHTML, cmdID, cmdExecOpt, pInVar, pOutVar);
}

void CMyHtmlView::OnEditCopy() 
{
    ExecFormCommand(IDM_COPY, OLECMDEXECOPT_DODEFAULT);
}

void CMyHtmlView::OnUpdateEditCopy(CCmdUI* pCmdUI) 
{
    UpdateCmdUIStatus(pCmdUI, QueryFormStatus(IDM_COPY));
}

void CMyHtmlView::OnEditCut() 
{
    ExecFormCommand(IDM_CUT, OLECMDEXECOPT_DODEFAULT);
}

void CMyHtmlView::OnUpdateEditCut(CCmdUI* pCmdUI) 
{
    UpdateCmdUIStatus(pCmdUI, QueryFormStatus(IDM_CUT));
}

void CMyHtmlView::OnEditPaste() 
{
    ExecFormCommand(IDM_PASTE, OLECMDEXECOPT_DODEFAULT);
}

void CMyHtmlView::OnUpdateEditPaste(CCmdUI* pCmdUI) 
{
    UpdateCmdUIStatus(pCmdUI, QueryFormStatus(IDM_PASTE));
}


Удачи!

Египко Николай,
www.nikeware.com
"Visual Comparer" — freeware file comparison utility with syntax highlight.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.