解答过《 实在是没法子了,请大家帮帮忙,关于添加ie工具栏图标的问题》,再拿100分,决不食言!!! 一次只能给100分,没办法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 怎样往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说得十分详细,大家自己读一读吧! 高分求答案:如何计时 在线等待!请问用AMD64机器上用VC开发出来的程序到P4或赛扬机器上运行时回出什么问题? 如何使CDialog中的CStatic能够响应单击事件? 200分的问题,请大家帮忙看看!! ## 是行家的进 请问谁能给我发两个GDI,GDI+的例子来呀?必有重谢, 如何拉动时产生虚框? createfile和copyfile都失败啊,为什么 谢谢DXD哥 菜鸟送分问题,结构体和类有什麽区别? 请问vc中如何设置窗口的大小和位置(不是对话框)? help me !!
#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说得十分详细,大家自己读一读吧!