最近一直在编写一个ie toolbar插件,全部功能都已经完成了,现在还有一个问题,用户希望添加到ie工具栏的按钮显示xp的样式。我的toolbar按钮的实现使用如下步骤:
1.实现toolband
2.在toolband上create一个TButton在网上搜遍了中文和英文资料,看了很多英文论坛对这个问题的讨论,codeproject上也找遍了。
目前结论如下:
1.exe文件比较容易,使用一个.manifest文件搞定
2.dll比较麻烦,msdn上有篇文章专门介绍了如何实现xp theme的方法,也是用的.manifest,我试了,没有成功!
3.如果是用的atl的CAxWindow,可以实现IDocHostUIHandler接口,然后设置它的一个flag,但我的button不是axwin的
4.自己实现IDocHostUIHandlerDispatch,再设置flag。现在看来,可能只有4的方法也许可以用。在尝试实现的时候又遇到一个问题:
ATL_NO_VTABLE中有如下申明
public IDispatchImpl<IToolBand, &IID_IToolBand, &LIBID_mytoolbar>
public IDispatchImpl<IDocHostUIHandlerDispatch, &IID_IDocHostUIHandlerDispatch, &LIBID_ATLLib>BEGIN_COM_MAP中
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IDocHostUIHandlerDispatch)显然这样是错误的,一个老外的论坛上讨论了这个问题,有人说要这样改:
COM_INTERFACE_ENTRY2(IDispatch,Imytoolbar)
COM_INTERFACE_ENTRY(IDocHostUIHandlerDispatch)我试了,没有搞定。现在卡在这里了,希望大家出点主意。这毕竟是写com时大家都可能面对的问题
1.实现toolband
2.在toolband上create一个TButton在网上搜遍了中文和英文资料,看了很多英文论坛对这个问题的讨论,codeproject上也找遍了。
目前结论如下:
1.exe文件比较容易,使用一个.manifest文件搞定
2.dll比较麻烦,msdn上有篇文章专门介绍了如何实现xp theme的方法,也是用的.manifest,我试了,没有成功!
3.如果是用的atl的CAxWindow,可以实现IDocHostUIHandler接口,然后设置它的一个flag,但我的button不是axwin的
4.自己实现IDocHostUIHandlerDispatch,再设置flag。现在看来,可能只有4的方法也许可以用。在尝试实现的时候又遇到一个问题:
ATL_NO_VTABLE中有如下申明
public IDispatchImpl<IToolBand, &IID_IToolBand, &LIBID_mytoolbar>
public IDispatchImpl<IDocHostUIHandlerDispatch, &IID_IDocHostUIHandlerDispatch, &LIBID_ATLLib>BEGIN_COM_MAP中
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IDocHostUIHandlerDispatch)显然这样是错误的,一个老外的论坛上讨论了这个问题,有人说要这样改:
COM_INTERFACE_ENTRY2(IDispatch,Imytoolbar)
COM_INTERFACE_ENTRY(IDocHostUIHandlerDispatch)我试了,没有搞定。现在卡在这里了,希望大家出点主意。这毕竟是写com时大家都可能面对的问题
调用UxTheme Manager的api让它帮你画带visual style的toolbar。
http://support.microsoft.com/default.aspx?scid=kb;en-us;830033
在stdafx.h文件的#if _MSC_VER > 1000语句上面添加了 #define ISOLATION_AWARE_ENABLED 1
甚至还在setting中添加了/D "ISOLATION_AWARE_ENABLED"反正网上的方法我都试过了,toolbar的button还是没有xp式样,
::MessageBoxEx(NULL, _T("test"),_T("info"),MB_ICONSTOP,LANG_CHINESE);
还是没有显示出xp式样!
肯定是你代码有错误。
windows不会让一个进程load两份不同的common control
所以你的exe要写manifest
我不写流氓插件
google上中英文的资料论坛都看完了,还是没有实现什么原因啊,我在做 www.yijian.com 的一个项目,
必须实现xp效果的toolbar按钮。就是google那种。再搞不定就要下课了!!!