大家看下这个图片,主窗口不是动态创建的,其中的MENU是使用编程工具的菜单编辑器创建的,只有其中的TOOLBAR是使用 CreateWindowEx 动态创建的,现在只能作到连接上了动态创建的IMAGE LIST 控件并正常显示了图片,但还有几个地方我要修改,可尝试了几次都没成功,所以请有这方面经验的前辈指点:1、背景:我怎么设置才可以使动态创建的TOOLBAR跟MENU和客户区都是一个背景色呢?(为了处理TOOLBAR发送给主窗口的 WM_NOTIFY 消息,我在程序里子类化的是主窗口而不是TOOLBAR,请问在主窗口的子类化回调中截获啥消息可以修改这个背景色不???)2、焦点外观:我这里创建时使用了 TBSTYLE_FLAT 风格,创建的不是3D效果而是平面效果的工具栏,这个风格下当鼠标移到按钮上时就会自动出现一个焦点外形框(如图片中的1、2按钮),可正常的情况应该是:当鼠标移出按钮时,这个外形框自动消失,可我创建的这个却不是,即使鼠标移走了,外形框还在。(第3个按钮我截图时没有移上去鼠标,所以他还没有这个外形框,只要我移上去一次,这个外形框就一直不消失了。。),请问这个怎么处理???3、文本:TOOLBAR的按钮上可以在图片下面显示文本的,可我怎么尝试都没有成功,我的按钮是使用 SendMessage 发送 TB_ADDBUTTONS 消息传递了 TBBUTTON 结构数组加上的,其中每个按钮我也设置了 BTNS_SHOWTEXT 风格,据MSDN上说没这个显示不了文本,可有这个标志我也显示不出来,我尝试过 SendMessage 发送 TB_SETBUTTONINFO 消息传递 TBBUTTONINFO 结构试图加文本没成功,其实我最想实现的是在 TB_ADDBUTTONS 消息传递 TBBUTTON 结构数组时给每个按钮的 .iString 成员赋值让其显示文本,按MSDN上说,这个 .iString 成员是按钮字符串的索引或者是包含按钮文本的字符串缓冲区指针,可我用个字符串将指针赋值给该成员结果不行,最后我又尝试 SendMessage 发送 TB_ADDSTRING 消息,这个消息按MSDN上解释是将新字符串增加到工具栏字符串池中(可能是我设置的格式不对?)总之我增加完之后,又在 .iString 成员上试图设置为索引来显示文本,可结果还是不行基本上就这3处问题了,有经验的前辈们多多帮忙,感激不尽!!!

解决方案 »

  1.   

    代码倒没必要保密什么的,但是不太好贴是因为我其实不是用VB写的,是易语言,是个中文编程工具。来这里求助是因为这里高手多,而我除了易只有对VB还算熟悉些,所以发在这里了不过大家解决问题的时候不用去考虑编程工具的问题,我以前做过不少VB与易代码的转换工作,所以我确信我这段易代码在VB上也会有上述问题存在。当然除了工具,我不排除我对某个API函数或消息值的处理存在问题,因为动态创建TOOLBAR我是第一次,以前都是创建些常规组件
      

  2.   

    我现在在写别的程序不方便调试,你可比较一下我这个帖子里创建工具栏的代码,我那个没你说的问题,你可看看和你写的是在哪里有区别
    http://topic.csdn.net/u/20100506/20/aeb7fb6f-8afc-4acf-8694-9be0b49ae8f7.html
     实现一个多页面浏览器源码研究第一阶段:VB6下用类MFC方式封装IE核心浏览器的可行性
      

  3.   

    简单看了下楼上的是使用 CreateToolbarEx 创建的TOOLBAR,而我是使用CreateWindowEx ,所以比较上很困难,目前我还在自己研究:
    1、背景的问题,应该说是没有解决,但我用了个替代方法,相当于开启了虚拟风格(visual styles),在VB里相当于使用资源文件额外加了个#24的XML资源,所以现在打开的背景色与XP程序是统一的。
    2、这个外观窗口依然未解决,但是同1,开启了虚拟风格后,鼠标移入移出的外形框是虚拟风格提供的了,所以也算是替代解决了。。
    3、这个问题我基本解决了,而且是使用了TB_ADDSTRING消息先添加了字符串池,然后每个 TBBUTTON 结构的 .iString 成员赋值为索引,以前测试确实不好用,是因为使用的结构是MSDN上提供的,结构共18字节,而现在好用了,是我查看了WINDDK里的头文件,里面定义的结构是20字节,其中多了2个保留字节(64位系统是4个保留字节),我将结构改为20个字节然后传递,现在就好用了所以第3个问题算是真正解决了,至于前2个问题,还没真正研究明白原因,所以还希望各位有兴趣的继续帮着提醒提醒,也算是大家一起研究学习嘛,以后遇到类似问题也好知道个所以然
      

  4.   

    有没有把spyxx搞出来,比较一下自己创建的toolbar和别人的显示正常的有啥区别
      

  5.   

    #6楼说的很在理,我使用SPY++查看了下,但是风格设置方面没有发现问题哦。
    没毛病的程序是多了几个风格,但都是与工具栏拖拽有关的,我做的这个不开启拖拽功能,至于其他,没有发现哦
      

  6.   

    现在背景色的问题(就是问题1也算是解决了):
    在主窗口的回调函数中(上面说过我子类化的是主窗口,就不另外再子类化一下这个工具栏了),获取到工具栏的句柄、HDC、矩形几个参数,填充下指定系统颜色即可:
    .版本 2    GetClientRect (hWndToolbar, lRect)
        FillRect (GetDC (hWndToolbar), lRect, GetSysColorBrush (#COLOR_3DFACE))这样按钮的背景色就成了,现在还是问题2是真正的没有解决,目前只有我开启虚拟风格才会不显示出那个鼠标到按钮上的外形框框,不然只要鼠标上去一次,然后他就一直显示了我感觉吧,因为鼠标的移入移出这个消息是可以截获的(WM_NOTIFY之中分离出 TBN_HOTITEMCHANGE 即可),应该在这里发送一个消息使先前的按钮恢复原状???或者发送个消息使工具栏重新绘制???我不确认该怎么做,测试了下也没成功,大家看看吧
      

  7.   

    SDK诸多控件里面唯一没有研究过的就是ReBar和ToolBar,杨过写的代码不错,你可以参考一下
      

  8.   

    外观控制需要自绘, 在父窗口中处理NM_CUSTOMDRAW消息
      

  9.   

    貌似#13说的十分有道理可惜啊。。我查了好久关于NM_CUSTOMDRAW消息的资料。。好复杂啊,请问谁有类似的VB代码啊。。关于NM_CUSTOMDRAW这个消息的处理的例子。。偶想学习学习
      

  10.   

    哈哈,终于全部解决了
    首先看我#10的代码,那时候为了解决工具栏背景问题,再主窗口的回调中处理了WM_PAINT消息,在这个消息里写了上面那段代码背景问题是解决了,可按钮的边框依然没解决。经过#13楼的提醒,我好一顿测试,最后发现不需要处理WM_PAINT消息,而在#13说的NM_CUSTOMDRAW消息中来做,NM_CUSTOMDRAW消息包括好几个阶段,只要处理其中的CDDS_PREPAINT(绘画开始之前)这个阶段就可以了,其他阶段在我这个程序里不需要任何处理。
    CDDS_PREPAINT之中也不需要做别的,只需要:
    FillRect (hDc, lParam + 20, GetSysColorBrush (#COLOR_3DFACE))
    这样一句即可,其中HDC在NM_CUSTOMDRAW消息中可以直接得到,lParam + 20 其实是个RECT结构的开头指针,这样直接用了比较方便,其中FillRect API中原先声明为RECT结构的现在改为整数型传递即可。最后再取个系统背景色来填充就可以了这样做完之后,不但工具栏的背景色解决了,而且当每次的鼠标移入移出后都会发生一次NM_CUSTOMDRAW消息消息,这样每次填充一下之后,原来被鼠标离开的那个按钮的边框就消失了。。正是我所需要的效果当然在NM_CUSTOMDRAW消息中可以进行按钮状态的自绘,能实现各种外观的按钮呢首先是在CDDS_PREPAINT阶段做完需要的工作后,返回32(CDRF_NOTIFYITEMDRAW),这样会激活其中每个按钮开始绘制,然后在截获的NM_CUSTOMDRAW消息中就要开始处理CDDS_ITEMPREPAINT这个阶段,这是项目(也就是其中的按钮)绘制之前的阶段,在这个阶段可以获取到很多信息,象按钮的RECT,HDC,按钮状态、刷子画笔等等,利用这些可以随心所欲的绘制了。当然我只是经过研究发下学习到的,我这个程序的要求里不需要自绘这样详细的按钮OK,帖子结了,分给大家
      

  11.   

    貌似#13说的十分有道理可惜啊。。我查了好久关于NM_CUSTOMDRAW消息的资料。。好复杂啊,请问谁有类似的VB代码啊。。关于NM_CUSTOMDRAW这个消息的处理的例子。。偶想学习学习
      

  12.   

    貌似#13说的十分有道理可惜啊。。我查了好久关于NM_CUSTOMDRAW消息的资料。。好复杂啊,请问谁有类似的VB代码啊。。关于NM_CUSTOMDRAW这个消息的处理的例子。。偶想学习学习
      

  13.   

    貌似#13说的十分有道理可惜啊。。我查了好久关于NM_CUSTOMDRAW消息的资料。。好复杂啊,请问谁有类似的VB代码啊。。关于NM_CUSTOMDRAW这个消息的处理的例子。。偶想学习学习貌似#13说的十分有道理可惜啊。。我查了好久关于NM_CUSTOMDRAW消息的资料。。好复杂啊,请问谁有类似的VB代码啊。。关于NM_CUSTOMDRAW这个消息的处理的例子。。偶想学习学习貌似#13说的十分有道理可惜啊。。我查了好久关于NM_CUSTOMDRAW消息的资料。。好复杂啊,请问谁有类似的VB代码啊。。关于NM_CUSTOMDRAW这个消息的处理的例子。。偶想学习学习
      

  14.   

    cf透视 cf透视下载 cf免费外挂尽在www.ucuc8.com
    想找最新的外挂吗?    想在第一时间看到更新外挂吗 ?     想找免费可用外挂吗?
          由于腾讯针对外挂SX非法模块更新快如你下的CF外挂总是“非法”不能使用,请到本站下载其它类型CF外挂试试http://www.ucuc8.com尚若所有CF外挂都非法不能用,请进  我要CF外挂网查看  http://www.ucuc8.com   查看是否有一手新挂更新...对于CF外挂不用钟情于一种,本站发布的CF外挂繁多,如果你觉得你正在用外挂功能不太满意,可以到下载其它CF外挂体验下,或许会有更多惊喜!!!
    如果觉得本站外挂不错,请告诉你玩CF的朋友 www.ucuc8.com还需要大家更多的宣传和支持...这样我们更有动力,把本站做的更多更强大