扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
|
interface ICommands : IDispatch { // methods [id(1)] //在Vtable中的函数索引号 HRESULT GetCurDirCommandMethod(); //得到VC当前工作目录 [id(2)] //在Vtable中的函数索引号 HRESULT QuitCommandMethod (); //退出VC编辑器 }; |
//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; } |
LPCTSTR szCommand = _T("GetCurDirCommand"); VARIANT_BOOL bRet; CString strCmdString; strCmdString.LoadString(IDS_CMD_STRING); strCmdString = szCommand + strCmdString; CComBSTR bszCmdString(strCmdString); CComBSTR bszMethod(_T("GetCurDirCommandMethod")); CComBSTR bszCmdName(szCommand); //和下面添加工具栏按钮对应 VERIFY_OK(pApplication->AddCommand(bszCmdString,bszMethod,0,dwCookie,&bRet)); //AddCommand 参数含义: //bszCmdString:命令字符串。 //bszMethod:Icommands接口函数名。 //第三个参数代表位图偏移量。 //第四和第五个参数分贝为系统参数和返回值(参照MSDN的IApplication介绍) if (bRet == VARIANT_FALSE) { *OnConnection = VARIANT_FALSE; return S_OK; } //添加工具栏按钮 if (bFirstTime == VARIANT_TRUE) { VERIFY_OK(pApplication->AddCommandBarButton(dsGlyph, bszCmdName, m_dwCookie)); } |
|
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者