最近一直在编写一个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.   

    可以考虑自己处理WM_PAINT
    调用UxTheme Manager的api让它帮你画带visual style的toolbar。
      

  2.   

    自己重画当然是可以的,但这样不是最好的解决办法,有点杀鸡用牛刀的感觉微软是提供了方法的,就是不会用。manifest应该还是可以用的,但我没有成功http://www.ookii.org/showpost.aspx?post=12
    http://support.microsoft.com/default.aspx?scid=kb;en-us;830033
      

  3.   

    http://groups.google.com/group/microsoft.public.platformsdk.shell/browse_thread/thread/a08e5b0ba582359a/06a6cc68d61a9f70
      

  4.   

    我是按照这些文章上说的方法做的,创建了.manifest文件,把文件添加到资源类型为24,ID为2的资源中
    在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式样!
      

  5.   

    宿主程序有没enable visual style?如果没有系统是不会让单独的dll来enable的。
    肯定是你代码有错误。
      

  6.   

    宿主是指load你dll的exe,
    windows不会让一个进程load两份不同的common control
    所以你的exe要写manifest
      

  7.   

    我写的是IE的插件,当然是IE来load我的dll了。但我肯定不能去动IE。
    我不写流氓插件
      

  8.   

    http://topic.csdn.net/t/20060714/11/4880142.html
      

  9.   

    神啊,救救我吧。都4个月了,还是没有搞定这个问题。
    google上中英文的资料论坛都看完了,还是没有实现什么原因啊,我在做 www.yijian.com 的一个项目,
    必须实现xp效果的toolbar按钮。就是google那种。再搞不定就要下课了!!!