CyberArticle二次开发手册 – 2、CyberArticle COM对象
要对CyberArticle进行二次开发,主要的方式,就是通过调用COM对象,而二次开发的核心内容,也就是COM对象的使用。
CyberArticle的COM对象主要分为以下几类:
1、书籍和节点相关的对象
CyberArticle的数据,都保存在书籍中,而书籍里面的基本元素就是节点。
- 书籍:ICABook
- 节点:ICANode
- 文章:ICAArticle
通过ICABook,可以打开,关闭一个书籍,或者获得书籍里面的节点等信息。
ICANode是书籍里面的节点。文件夹,文章,统一称为节点。无论是文件夹,还是文章,都是一个节点。通过ICANode的相关信息,可以获得节点的信息,例如类型,标题等等。
ICAArticle则是文章节点所包含的文章数据对象。通过ICAArticle,可以将文章保存成HTML文件,或者更新一个文章等等。通过ICANode可以获得ICAArticle。
其他相关对象:
- ICALabel:标签
- ICAAttachment:附件
- ICAArticleResource:文章资源。CyberArticle文章是一个HTML文件。HTML文件不但有HTML代码本身,还包括里面引用的CSS,图片,Flash等等资源。
- ICAProfile:用来保存文章的配置文件,可以设置是否包含图片,包含脚本等等。
- ICABookmark:书签。一个书签可以代表一个书签文件夹或者一篇文章
- ICAIcon:图标。书籍内的自定义图标。
- ICACommand:保存网页的命令。
- ICADatabase:CyberArticle数据库对象
- ICADBError:CyberArticle数据库操作错误对象
- ICANodeHistory:结点历史纪录对象
2、集合对象
通常节点,书籍等等,都可能需要一个类似数组的集合,例如获得一个文件夹下面的文章,就需要一个集合。CyberArticle里面,对象的集合,都是ICAXXXCollection这样的对象。
- ICABookCollection:书籍集合
- ICANodeCollection:节点集合
- ICALabelCollection:标签集合
- ICAAttachmentCollection:附件集合
- ICAArticleResourceCollection:文章资源集合
- ICAProfileCollection:配置文件集合
- ICABookmarkCollection:书签集合
- ICAIconCollection:图标集合
- ICANodeHistoryCollection:节点历史数据集合
每一个Collection对象,都至少具有以下两个属性:
[propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] LONG* pVal);
[propget, id(2), helpstring("property Item")] HRESULT Item([in] LONG nIndex, [out, retval] IDispatch** pVal);
[propget, id(2), helpstring("property Item")] HRESULT Item([in] LONG nIndex, [out, retval] IDispatch** pVal);
- 属性Count:返回集合的元素数量。
- 属性Item:获得某一个元素。
下面是一个使用的例子:
C++ 例子
ICANodeCollection* pNodeCollection(pDisp);
//
long nCount = 0;
pNodeCollection->get_Count(&nCount);//获得节点数量
//
for (long i = 0; i < nCount; i++)
{
CComPtr<IDispatch> spDispNode = NULL;
if (FAILED(pNodeCollection->get_Item(i, &spDispNode)))//获得一个节点
continue;
//
CComQIPtr<ICANode> spNode(spNodeDisp);//转换为ICANode
//
CComBSTR bstrTitle;
spNode->get_Title(&bstrTitle);//获得标题
AfxMessageBox(CString(bstrTitle));//显示标题
}
//
long nCount = 0;
pNodeCollection->get_Count(&nCount);//获得节点数量
//
for (long i = 0; i < nCount; i++)
{
CComPtr<IDispatch> spDispNode = NULL;
if (FAILED(pNodeCollection->get_Item(i, &spDispNode)))//获得一个节点
continue;
//
CComQIPtr<ICANode> spNode(spNodeDisp);//转换为ICANode
//
CComBSTR bstrTitle;
spNode->get_Title(&bstrTitle);//获得标题
AfxMessageBox(CString(bstrTitle));//显示标题
}
VBScript 例子
For i = 0 To objNodeCollection.Count - 1 Step 1
Dim objNode
Set objNode = objNodeCollection.item(i)
MsgBox(objNode.Title)
Next
Dim objNode
Set objNode = objNodeCollection.item(i)
MsgBox(objNode.Title)
Next
JavaScript例子
objBook.Open(guidBook);
var childNodes = objBook.RootNode.Children;
for (var i = 0; i < childNodes.Count; i++)
{
jsAlert(childNodes.Item(i).Title);
}
var childNodes = objBook.RootNode.Children;
for (var i = 0; i < childNodes.Count; i++)
{
jsAlert(childNodes.Item(i).Title);
}
3、UI相关对象
- ICABookTools:书籍工具,可以显示创建/打开书籍对话框等等
- ICACommonUI:通用UI,可以显示书籍,节点属性等对话框。
- ICAHelper:可以用来在IE里面保存网页,并显示保存网页对话框
- ICAContextMenu:IE右键菜单
- ICAToolButton:IE工具栏按钮
- ICAImportHTML,ICAImportHTMLData,ICAImportHTMLDataCollection:用来批量导入文件
4、CyberArticle用户交互
- ICAAutomationApp:可以获得正在正在运行的CyberArticle的一些相关信息,例如用户正在打开的文章,选中的节点等等。
5、BookBuilder批量下载保存网页
- ICABookBuilderAutomationApp:可以调用BookBuilder,批量下载网页。
6、通用对象,和CyberArticle没有关系,可以在任何地方使用
- IWizBubbleWnd:一个消息框,通常用来显示一个信息。如果用户没有操作,一段时间后,自动消失
- IWizURLDownloader:可以用来下载文件并获得下载后的文件
- IWizProgressWnd:一个进度对话框
- IWizRtf2Html:RTF2HTML,将RTF转换为HTML
- IWizMessageBoxWnd:一个消息对话框,可以显示“不再提示”复选框。
- IWizCommonUI:可以显示一些常用的对话框,例如输入文字对话框等等。
- IWizMimeMessage:用来打开,保存,转换mime文件的工具。
以上这些,就是CyberArticle公开的COM对象。这些COM对象,全部都可以通过脚本语言(JsvaScript/VBScript),高级语言(C/C++/Delphi),.NET语言(C#/VB.NET)等等调用,只要这些语言支持COM自动化技术即可。
CyberArticle,也可以看作一个Shell程序,通过调用这些对象,来实现某些特定的功能。
最近评论