ICAEditPlugin 接口

// {434C6434-6BF4-4913-8D70-09E4E5F349E4}
const GUID IID_ICAEditPlugin = 
{ 0x434c6434, 0x6bf4, 0x4913, { 0x8d, 0x70, 0x9, 0xe4, 0xe5, 0xf3, 0x49, 0xe4} };

interface ICAEditPlugin: public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE put_WebBrowser(IWebBrowser2* pWebBrowser) = 0;
    virtual HRESULT STDMETHODCALLTYPE put_Book(ICABook* pBook) = 0;
    virtual HRESULT STDMETHODCALLTYPE put_Node(ICANode* pNode) = 0;
};

put_WebBrowser(IWebBrowser2* pWebBrowser)

说明

通知插件当前正在编辑的文章的浏览器接口。插件可以根据IWebBrowser2对象,操作正在编辑的文章。

参数

  • pWebBrowser:[in]。浏览器接口(MSIE)。

返回

插件应该返回S_OK。

put_Book(ICABook* pBook)

说明

通知插件当前正在编辑的文章所在的书籍。

参数

  • pBook:[in]。书籍接口

返回

插件应该返回S_OK。

put_Node(ICANode* pNode)

说明

通知插件当前正在编辑的文章。

参数

  • pNode:[in]。文章接口。对于新建的文章,可能是NULL。

返回

插件应该返回S_OK。

说明

CyberArticle在用户点击相应的插件菜单后,会首先向插件设置浏览器信息和正在编辑的文章信息,然后调用ICAPlugin::Execute方法。
CyberArticle内部调用编辑插件的代码如下(示例):

CComPtr<ICAPlugin> spPlugin;
// ... 
ASSERT(spPlugin); 
// 
CComQIPtr<ICAEditPlugin> spEditPlugin(spPlugin); 
//查询ICAEditPlugin接口。如果支持,就将调用相应地方法。 
if (spEditPlugin) 
{ 
    spEditPlugin->put_WebBrowser(m_pBrowserApp); //通知插件当前的浏览器接口。 
     // 
    CCyberArticleEditDoc* pDoc = GetDocument(); 
    if(pDoc) 
    { 
        spEditPlugin->put_Book(pDoc->GetBook()); //通知插件当前正在编辑的书籍 
         // 
        CComPtr<ICANode> spNode = pDoc->GetNode(); 
        if (spNode) 
        { 
            spEditPlugin->put_Node(spNode); 
            //通知插件当前正在编辑的文章。 
             //注意,如果没有调用该方法,或者spNode==NULL, 
             //说明正在编辑的文章还没有被保存,没有生成CyberArticle节点。 
         } 
    } 
} 
// 
//通知插件执行相应的功能 
HRESULT hr = spPlugin->Execute(); 
// if (S_OK == hr) { CCyberArticleEditDoc* pDoc = GetDocument(); ASSERT(pDoc); // pDoc->SetModifiedFlag(TRUE); }