VC++内部COM插件的编程实现
2006-07-21 11:45:38 来源:WEB开发网interface ICommands : IDispatch
在接口ICommands添加接口函数,那么相应的我们也要在类CCommands中声明和实现ICommands接口函数,函数的内部代码和普通工程代码没什么区别。
{
// methods
[id(1)] //在Vtable中的函数索引号
HRESULT GetCurDirCommandMethod(); //得到VC当前工作目录
[id(2)] //在Vtable中的函数索引号
HRESULT QuitCommandMethod (); //退出VC编辑器
};
//Implement(CCommands类内部接口函数的声明)
<3.4> 创建工具栏,连接工具栏按钮事件
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_OK;
}
更多精彩
赞助商链接