IE工具栏上添加的按钮所响应的事件

wfc2004122 2009-07-24 10:59:54
我看了ray_linn的文章: http://www.javaeye.com/topic/342457 (IE工具栏上添加按钮)
按照方法我加了两个按钮A和B...
1:) 单击后怎么区分单击了哪个按钮 (我想要的效果: 单击A后弹出MessageBox, 单击B后, 弹出下拉菜单)

2:) 怎么实现按钮A和B的右击事件...
...全文
189 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wfc2004122 2009-07-27
  • 打赏
  • 举报
回复
思路:添加两个类CA和CB, 分别实现XXX::Exec()
***.rgs里部分代码

HKLM
{
NoRemove Software
{
NoRemove Microsoft
{
NoRemove 'Internet Explorer'
{
NoRemove Extensions
{
ForceRemove '{8C9C21C7-E5D5-4ea6-8D6C-8FE497E2834A}'
{
val ButtonText = s 'Hello'
val Icon = s 'D:\wsc\test2\Ads.ico'
val CLSID = s '{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}'
val ClsidExtension = s '{2F095967-7244-4BAC-9CF0-73502D391677}' (这个是CA对应的GUID)
val 'Default Visible' = s 'yes'
}

ForceRemove '{772F5D87-42F9-43fd-B64A-9E15C5DA7A5F}'
{
val ButtonText = s 'World'
val Icon = s 'D:\wsc\test2\General.ico'
val CLSID = s '{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}'
val ClsidExtension = s '{7DC38DC9-FFFC-490E-837F-545094223E5F}' (这个是CB对应的GUID)
val 'Default Visible' = s 'yes'
}
}
}
}
}
}

这样实现添加按钮的单击事件...
wfc2004122 2009-07-27
  • 打赏
  • 举报
回复
ok...呵呵...单击实现...不愧天狼星...
先结贴...再发我的代码思路...再发贴(关于右键的...看看还有没有别的思路...)
ahao 2009-07-27
  • 打赏
  • 举报
回复
没有主要代码。你怎么加第一个按钮的?再重复一遍加第二个啊。

右击估计实现不了,不是会弹出ie的默认菜单吗?
如果你一定要处理右键,就hook鼠标消息。
wfc2004122 2009-07-27
  • 打赏
  • 举报
回复
还有就是右击事件能实现吗..?
wfc2004122 2009-07-27
  • 打赏
  • 举报
回复
能否贴出主要代码...?
ahao 2009-07-27
  • 打赏
  • 举报
回复
你必须加两个类,然后才会有两个不同的GUID
val ClsidExtension = s '{B62F9ED3-FE9F-486E-89D1-C26FEB3C237F}'

我试过了,可以
wfc2004122 2009-07-27
  • 打赏
  • 举报
回复
帖上主要代码
***.rgs里注册按钮

HKLM
{
NoRemove Software
{
NoRemove Microsoft
{
NoRemove 'Internet Explorer'
{
NoRemove Extensions
{
ForceRemove '{B2D3F85C-C35C-4ca8-8BC7-CFEE63D6217A}'
{
val ButtonText = s 'A'
val Icon = s 'D:\wsc\test\Filter\Gladder.ico'
val CLSID = s '{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}'
val ClsidExtension = s '{B62F9ED3-FE9F-486E-89D1-C26FEB3C237F}'
val 'Default Visible' = s 'yes'
}

ForceRemove '{A0688E82-C7F9-44fc-89A3-7C93D58C30AB}'
{
val ButtonText = s 'B'
val Icon = s 'D:\wsc\test\Filter\Ads.ico'
val CLSID = s '{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}'
val ClsidExtension = s '{B62F9ED3-FE9F-486E-89D1-C26FEB3C237F}'
val 'Default Visible' = s 'yes'
}


}
}
}
}
}


***.cpp中的 XXX::Exec()

HRESULT hr = S_OK;

if (pguidCmdGroup == NULL)
{
switch (nCmdID)
{
case 0:
{
MessageBox(NULL,_T("one button"),_T("IE Button"),MB_OK); // 不论单击A或B按钮, 都会执行此句
break;
}
default:
{
MessageBox(NULL,_T("other"),_T("IE Button"),MB_OK);
hr = OLECMDERR_E_NOTSUPPORTED;
break;

}
}
}
else
{
hr = OLECMDERR_E_UNKNOWNGROUP;
}

return hr;



另附MSDN Adding Toolbar Buttons 的部分

COM Objects
In order to invoke a Component Object Model (COM) object from Internet Explorer, it must implement IOleCommandTarget. Only one command is supported per object; the COM object's IOleCommandTarget::Exec is always called with nCmdID=0 and with VARIANT arguments set to NULL. Additionally, the implementation of IOleCommandTarget::QueryStatus is always called with cCmds=1.

If the COM object needs to access the browser or Dynamic HTML (DHTML) Object Model of the active page, it must implement IObjectWithSite. Internet Explorer calls IObjectWithSite::SetSite with a pointer to IShellBrowser.

ahao 2009-07-27
  • 打赏
  • 举报
回复
你怎么加一个按钮的,就怎么加另一个按钮,两个按钮之间没有关系,有各自的注册表项不就行了?
wfc2004122 2009-07-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ahao 的回复:]
取按钮上的文字可以区分,虽然不是很好的方法
或者干脆就用两个类啊
[/Quote]
是不是我理解能力不够...呵呵...
在一个BHO中...怎么做...
ahao 2009-07-27
  • 打赏
  • 举报
回复
取按钮上的文字可以区分,虽然不是很好的方法
或者干脆就用两个类啊
wfc2004122 2009-07-27
  • 打赏
  • 举报
回复
望赐教...
wfc2004122 2009-07-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ahao 的回复:]
Exec函数不是有个GUID参数吗?应该是你那个按钮的GUID吧
[/Quote]
我取出时为NULL...
ahao 2009-07-25
  • 打赏
  • 举报
回复
Exec函数不是有个GUID参数吗?应该是你那个按钮的GUID吧
hhwei1985 2009-07-25
  • 打赏
  • 举报
回复
帮顶
wfc2004122 2009-07-25
  • 打赏
  • 举报
回复
no one...?
wfc2004122 2009-07-24
  • 打赏
  • 举报
回复
?
jyh_baoding 2009-07-24
  • 打赏
  • 举报
回复
有专业的讨论这问题的帖子,你查查
wfc2004122 2009-07-24
  • 打赏
  • 举报
回复
to oyljerry:
多谢你的回复...
他分析的ID是点击B后下拉出菜单里的子ID...而我想要分析A和B这两个按钮的ID...
oyljerry 2009-07-24
  • 打赏
  • 举报
回复
1.代码例子中给出了,分析不同的ID

# switch (nCommand)
# {
# case ID_CHIMP:
# {
# MessageBox(hWndParent,_T("Play Video"),_T("IEVideo --Ray"), MB_OK|MB_ICONEXCLAMATION);
# }
# break;
# case ID_SELECT:
# {
# MessageBox(hWndParent,_T("Select Video"),_T("IEVideo --Ray"), MB_OK|MB_ICONEXCLAMATION);
#
# }
# break;
# case ID_STOP:
# {
# MessageBox(hWndParent,_T("Stop Video"),_T("IEVideo --Ray"), MB_OK|MB_ICONEXCLAMATION);
# }
# break;
# case ID_ABOUT:
# {
# MessageBox(hWndParent,_T("About IEVideo"),_T("IEVideo --Ray"), MB_OK|MB_ICONEXCLAMATION);
# }
# break;
# }

16,548

社区成员

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

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

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