《2022年飞秋FeiQ插件开发指南 .pdf》由会员分享,可在线阅读,更多相关《2022年飞秋FeiQ插件开发指南 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、飞秋 FeiQ(局域网聊天软件 )插件开发指南作者:卢本陶版权所有侵权必究1、开发前准备请确保有飞秋FeiQ.exe 程序,并且确定版本是在V2.5a 版本以上。只有V2.5a 版本及以上版本才支持插件。如您还没有飞秋FeiQ.exe 程序,可以去以下地址下载最新版本:http:/ :Visual C+6.0 2、创建插件工程创建插件工程,首先把飞秋FeiQ 插件源代码目录中wizard 目录下的FeiQPluginWizard.awx文件拷至 VC 安装目录 Microsoft Visual StudioCOMMONMSDev98Template ,然后在VC中创建一个插件工程。第一步:创建
2、一个OfficeChat 工程。第二步:设置插件的信息。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 完成点 Finish 完成之后,可以自动生成如下函数: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 这些自动生成的代码, 已经定义了FeiQ 的接口函数,
3、一个插件的基本框架已经搭建成功,用户只需要在这些接口函数里添加自己的功能。创建完成一个插件工程之后,就需要考虑在FeiQ 程序界面能体现出该插件,如菜单、 面板;具体怎么操作可以查看示例中的几个插件源代码。3、界面上的体现(1)增加菜单在 OnLoad(IDispatch* FQModuleSite)函数中增加菜单,这函数在程序启动时自动加载。IFQModuleSitePtr m_ptrModuleSite; IFQRootPtr m_ptrRoot; int m_AddMenuID; HRESULT COfficeChatModule:OnLoad(IDispatch* FQModuleSi
4、te) m_ptrModuleSite = FQModuleSite; m_ptrModuleSite-get_FQRoot(&m_ptrRoot); CComBSTR identeriferMenu(FeiQ.Menu); m_ptrMenu = m_ptrRoot-Module(_bstr_t)identeriferMenu; IFQUICommand* pUICmd = dynamic_cast(&m_xMenuSink); m_AddMenuID = m_ptrMenu-AddItem(FQ_UI_TYPE_TRAY_MENU, 退 出 (&C), pUICmd, 办公模式对话框|,
5、101); return S_OK; /*菜单 Text 说明 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 形式如|测试 Group|测试其中 | 和可选。 | 表示分隔符。在名称前加| 表示在添加的菜单项上面添加分隔符. 在名称前后| 表示在添加的菜单项下面添加分隔符. 是上下级菜单的关系。例子中测试菜单的父菜单是测试Group。当测试Group 不存在时,程序会自动创建这组菜单*/ 在程序退出时,删除加载的函数: H
6、RESULT COfficeChatModule:OnUnload() IFQUICommand* pUICmd = dynamic_cast(&m_xMenuSink); if(m_ptrMenu) m_ptrMenu-DelItem(FQ_UI_TYPE_TRAY_MENU, m_AddMenuID, pUICmd); return S_OK; (2)增加抽屉栏面板CShortCutDlg shortCutDlg; 在 Onload 函数中IFQFolderBarPtr bar(CLSID_FQFolderBar); shortCutDlg.m_ptrRoot = m_ptrRoot; s
7、hortCutDlg.Create(IDD_DIALOG_SHORTCUT); int m_nAddBar = bar-AddBar(L程序快捷方式, (LONG)&shortCutDlg); (3)交互控制以上已经实现了插件在FeiQ 添加菜单的功能,用户在点击菜单的时候,就可以在插件中进行响应,具体操作的步骤: HRESULT COfficeChatModule:MenuOnInvoke(enum FQ_UI_TYPE Type, long Id, VARIANT Parameter ) /点击自定义的菜单后,会触发此事件if(Id = m_AddMenuID) /这里写你要实现的代码 设
8、置菜单项的状态:HRESULT COfficeChatModule:XMenuSink:raw_OnQueryState(enum FQ_UI_TYPE Type, long Id, VARIANT Parameter, BSTR * bstrText, enum FQ_UI_ITEM_STATE * State ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - METHOD_PROLOGUE(COfficeChatModul
9、e, MenuSink) if(Id = pThis-m_AddMenuID1) /这里设置菜单的属性,如选中,不可用,更改菜单名称 (4)数据的发送和接收数据的发送:IFQDataPtr pFQSendData(CLSID_FQData); pFQSendData-SetString(FQDK_KEY, FQDK_MODULE_KEY_CHAT); pFQSendData-SetString(FQDK_MODULE_KEY_CONTENT, (LPCTSTR)m_strChat); m_ptrModuleSite-SendData(LPCTSTR)strPlayBuddyIp, pFQSen
10、dData); 注意每次发送数据时,必须要设置FQDK_KEY 的值。数据发送结果的查看:数据发送完成后,将解发OnSendDataResult 的消息。HRESULT COthelloGameModule:OnSendDataResult(LPCTSTR Sender, LPCTSTR key, enum FQ_SENDDATA_RESULT nResult) I f(strKey = FQDK_MODULE_KEY_ASKPLGUIN) /如果是询问是否有插件if(nResult = FQ_MODULE_SEND_DATA_RESULT_OK) /发送成功 return S_OK; 数据的
11、接收:数据到达时,数据会触发OnDataReceived 消息HRESULT COthelloGameModule:OnDataReceived(LPCTSTR key) /当接收到数据包的时候,激发此事件CString strKey = key; if(strKey = FQDK_MODULE_KEY_ASKPLGUIN) IFQDataPtr pFQData = m_ptrModuleSite-GetData(key, VARIANT_TRUE); /得到接收到的数据,并将此数据包从队列中删除. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
12、- - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - /如果上面的代码写成:IFQDataPtr pFQData = m_ptrModuleSite-GetData(key, VARIANT_FALSE); /表示得到接收到的数据,但并没有把数据包从队列中删除.,这样就会提示一消息框,当用户点击了消息框上的按钮时,就会触发OnViewData 消息。 return S_OK; HRESULT COthelloGameModule:OnViewData(LPCTSTR key, LPCTSTR Result) /当在 OnDat
13、aReceived 中,没有将Key 中的数据包从队列中删除的话,将弹出一个提示框,用户点击提示框的按钮时,将触发OnViewData 事件CString strKey = key; IFQDataPtr pFQData = m_ptrModuleSite-GetData(key, VARIANT_TRUE); if(strKey = FQDK_MODULE_KEY_ASKCOMEGAME) /是否同意对方的邀请CString strResult = Result; _bstr_t bstrRecvIP = pFQData-GetString(FQDK_SENDER);/这个值是系统发送时自动
14、加上的if(strResult = 接受 ) return S_OK; (5)用户自定义数据的保存与读取读取:一般在 Onload 中读取用户自定义数据。IFQDataPtr cfgPtr;/ 得到配置信息m_ptrRoot-get_UserCustomConfig(&cfgPtr); if(cfgPtr) int nOfficeChat = cfgPtr-GetLong(LOFFICECHAT); if(nOfficeChat = 1) g_bOfficeChat = TRUE; else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
15、- - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - g_bOfficeChat = FALSE; long nSendMsgEnter = 0; if(cfgPtr-raw_GetLong(LBGCHAT_SENDMODE, &nSendMsgEnter) = S_OK) g_bSendMsgEnter = nSendMsgEnter; 保存:IFQDataPtr cfgPtr;/ 得到配置信息m_ptrRoot-get_UserCustomConfig(&cfgPtr); cfgPtr-SetLong(LOFFICECHAT, g
16、_bOfficeChat);/保存进配置用户只要把值设置成cfgPtr 配置信息中,主程序退出时,会自动保存此数据。设置:HRESULT COthelloGameModule:OnConfig() /当用户点击插件管理及设置中的设置按钮时,会自动进入此函数CSetDlg setDlg; setDlg.fontSend = g_fontSend; if(setDlg.DoModal() = IDOK) g_fontSend = setDlg.fontSend; return S_OK; 4、插件的编译及发布程序要进行调试时,要选择飞秋FeiQ.exe 进行调试。名师资料总结 - - -精品资料欢
17、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 输出目录:发布插件时:应把程序设置成Release版本名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 飞秋 FeiQ 会自动加载飞秋FeiQ 工作目录下的Plugins目录下面的所有插件, 这些插件不要求注册,程序会自动注册。只要把插件放进Plugins 目录即可。所以编译好的插件,如果输出目录没有放Plugins 目录,应手动拷贝到Plugins 目录下面。飞秋FeiQ 的插件目录,可以在点插件管理及设置中的打开插件目录,来查看位于哪个目录。更好飞秋插件开发文档及技巧可去飞秋论坛查看:http:/ - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -
限制150内