解答过《 实在是没法子了,请大家帮帮忙,关于添加ie工具栏图标的问题》,再拿100分,决不食言!!!

suntt 2002-12-05 10:22:24
一次只能给100分,没办法
...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pp_ipr 2002-12-05
  • 打赏
  • 举报
回复
怎样往IE5工具条添加按钮

先要感谢金山词霸2000哈,嘻嘻!我是在一次安装金山词霸时偶然发现注册表的某些“变化”,进而摸索出这条技术的。

  说真的,如今的programmer无一例外地整天在网上搜索并使用着先人给我们留下的大量宝贵的免费代码。呜呼!谨以此plug-in献给那些整天在“幕后”给我们默默写代码的无名英雄们,我们的软件有一部分属于你们!!!!!向你们致敬!

废话就这么多,打开VC,我们自己做一个ie toolbar extension button吧!:-) let's go!

建立一个ATL工程的方法不用说乐吧?(看看《ATL大扫盲之2.5 & 2.6吧》)选File->New->ATL Com Wizard,起个your gril friend的名字,比如我就起了个“梁咏琪”怎么样?够cool吧?!....然后全部取默认值!以前说的比脸还干净的组件库就生成了!

然后Insert->New ATL Object....选Object组中的“Simple Object”,下一步,在Short Name中输入“DM_IE_TBBtn”,然后(全部接受默认值)按OK。瞧!我们又生成了一个比脸还干净的接口!这就是我们的IE工具栏啦哈!你也许会说,现在这个接口能干P呀?!哈!接着往下看哪!...

要让我们的接口能在IE工具栏中响应用户点击,一个重要的工作是让它实现IOleCommandTarget接口。为什么?嘻嘻!这个问题我可以不回答吗?:-) 看资料呗!.....那么如何实现该接口?别指望App Wizard乐,手工干吧!

双击左边的CDM_IE_TBBtn再到右边的类定义中添加IOleCommandTarget支持....


#include // IOleCommandTarget在这儿,先去他家把他请出来8然后:class ATL_NO_VTABLE CDM_IE_TBBtn : public IOleCommandTarget, public CComObjectRootEx,....再:BEGIN_COM_MAP(CDM_IE_TBBtn) COM_INTERFACE_ENTRY(IOleCommandTarget).....最后在类的public段中添加接口定义: /////////////////////////////////////////// // IOleCommandTarget Implementation STDMETHOD (QueryStatus) (const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText); STDMETHOD (Exec) (const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut); // End of IOleCommandTarget Implementation ////////////////////////////////////////////
完了?啊!8-| 就这么简单?啊!没搞错吧?当然没有!

下面再打开EM_IE_TBBtn.cpp添加接口实现就OK乐!


STDMETHODIMP CDM_IE_TBBtn::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText){ if( ! prgCmds ) return E_POINTER; for(ULONG i = 0; i < cCmds;i++) prgCmds[i].cmdf = OLECMDF_SUPPORTED | OLECMDF_ENABLED; return S_OK;}STDMETHODIMP CDM_IE_TBBtn::Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut){ switch( nCmdExecOpt ) { case OLECMDEXECOPT_DODEFAULT: MessageBox(NULL,_T("天哪!这么简单?!"),_T("这就是插件?!"),MB_OK); break; default: break; } return S_OK;}

理论上我们的插件就可以使用了,但我们还需要将它插到IE里,请注意
HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Internet Explorer\\Extension子键!嘻嘻!好了,到此为止,聪明的你已经知道一切了,剩下的事就不用我说了,在源代码中有readme.htm说得十分详细,大家自己读一读吧!
suntt 2002-12-05
  • 打赏
  • 举报
回复
拿分!!!
suntt 2002-12-05
  • 打赏
  • 举报
回复
拿分!!!
suntt 2002-12-05
  • 打赏
  • 举报
回复
拿分!!!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧