WEB开发网
开发学院软件开发VC VC++内部COM插件的编程实现 阅读

VC++内部COM插件的编程实现

 2006-07-21 11:45:38 来源:WEB开发网   
核心提示: interface ICommands : IDispatch{// methods[id(1)] //在Vtable中的函数索引号HRESULT GetCurDirCommandMethod();//得到VC当前工作目录[id(2)]//在Vtable中的函数索引号HRESULT Qui

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_OK;
}
<3.4> 创建工具栏,连接工具栏按钮事件

Tags:VC 内部 COM

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接