- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用ATL实现VC插件
用ATL实现VC插件
#if 1
一、闲聊首先,在这里向前段时间没来得及回复你们问题的朋友们说声对不起了,这段时间工作实在太忙,我快倒!哈哈!好了,让我们转入正题,今天要谈的话题是COM,稍微深入一点,不知道大家用过C++Test或者Visual Assistant(可到VC知识库工具栏目下载)之类的软件没有,它们都有个非常引人注目的功能,那就是把它们自身嵌入到VC开发环境中去。这个功能让我痴迷不已,原因只有一个:我想做一个可以嵌入VC开发环境的VC工程解析器(已被收录在VC知识库在线杂志第19期中),这样用户在VC开发环境中就可以直接对当前或所有工程进行各种分析,统计。那么实现它简单吗?简单,Next和Copy即可轻松完成;仅仅这些吗?不是,它的背后还有博大精深的COM做支撑。不管困难与否,还是让我们先试为快。二、效果图三、实现步骤:3.1新建一个DevStudio Add-in Wizard类型工程,输入工程名称CodeAnalyser. 3.2进入第二个画面,系统要求用户输入插件的名称和描述信息。并且要求用户选择是否需要生成工具栏以及是否自动添加VC事件响应代码。3.3点击Finish结束向导,进入代码编辑窗口。在这里我们要说的一点是:该工程引用了ICommands接口,并从该接口上派生出 CCommands类。该类完成了所有用户自定义函数接口,VC应用程序消息响应和VC调试动作的消息响应工作。当我们真正为CCommands类添加成员函数之前我们必须先为ICommands接口添加相应的函数接口声明。在本工程中我总共为ICommands接口添加了两个函数接口,它们名字分别为:GetCurDirCommandMethod和QuitCommandMethod声明如下:(在CodeAnalyer.odl文件中)
interface ICommands : IDispatch
{
// methods
[id(1)] //在Vtable中的函数索引号
HRESULT GetCurDirCommandMethod(); //得到VC当前工作目录
[id(2)] //在Vtable中的函数索引号
HRESULT QuitCommandMethod (); //退出VC编辑器
};
在接口ICommands添加接口函数,那么相应的我们也要在类CCommands中声明和实现ICommands接口函数,函数的内部代码和普通工程代码没什么区别。
//Implement(CCommands类内部接口函数的声明)
public:
STDMETHOD(GetCurDirCommandMethod)(THIS);
STDMETHOD(QuitCommandMethod)(THIS);
//Function Code(Ccommands类内部接口函数的实现)
//得到当前VC开发环境的工作目录[您也可以让它成为你想要实现的功能代码]
STDMETHODIMP CCommands::GetCurDirCommandMethod()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
VERIFY_OK(m_pApplication-EnableModeless(VARIANT_FALSE));
BSTR bstrCurDir;
m_pApplication-get_CurrentDirectory(bstrCurDir);
CString str(bstrCurDir);
::MessageBox(NULL, str, VC工作目录, MB_OK | MB_ICONINFORMATION);
VERIFY_OK(m_pApplication-EnableModeless(VARIANT_TRUE));
return S_OK;
}
//退出VC开发环境
STDMETHODIMP CCommands::QuitCommandMethod()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
VERIFY_OK(m_pApplication-EnableModeless(VARIANT_FALSE));
if(::MessageBox(NULL,
您想退出VC++编辑器吗(Y/N)?,
询问信息...,
MB_YESNO | MB_ICONQUESTION) == IDYES)
m_pApplication-Quit();
VERIFY_OK(m_pApplication-EnableModeless(VARIANT_TRUE));
return S
您可能关注的文档
最近下载
- 《机械制图》练习题库+答案.pdf VIP
- 古诗十九首概要课件.ppt VIP
- 《保险经济学》研究生课程教学大纲(王晓全).pdf VIP
- BP8523D_CN_DS_Rev_1.0 规格书 晶丰明源家电电源.pdf VIP
- 《慢性胃炎》课件.pptx VIP
- 财会法律教程 教学课件 谭治宇 裴斐 主编 第二章 企业法律制度.pdf VIP
- 建标233号-2008 煤炭工程项目建设用地指标──矿井、选煤厂、筛选厂及矿区辅助设施部.pdf VIP
- 阅读分享--《做一个幸福的教师》课件.pptx VIP
- 菲律宾结构设计规范NSCP chapter 7b.pdf VIP
- QGDW 12180-2021 智能物联电能表功能及软件规范.doc VIP
文档评论(0)