最近在写一个IE Plug-in, 工具栏, 上面得有个登录按钮, 发现百度, Google工具栏的登录按钮都在右边, 感觉这种界面非常不错, 想使用这种方式. 但自己实现的时候发现这种技术还真难, 在网上找了近2天, 都没找到方法.各们大侠们, 有谁知道的请给点提示, 感激不尽呀!

解决方案 »

  1.   

    大概的效果, 一会儿我传张图上来.Toolbar默认的效果是左对齐, 所有按钮都会显示在左边.但百度, GOOGLE的工具栏, 左边也有按钮, 右边也有按钮. 我把MSDN都找完了, 也没看到有什么方法. 所有的按钮还是只有显示在左边.要实在的效果就是, 左边也有按钮, 右边也有按钮这种!
      

  2.   

    晕, 图太长了, 这里是地址: http://links.imgup.cn/201007/5/15/49711_12783139162P4K.jpg
      

  3.   

    借贵地问个问题。
    上图这个是用什么控件来实现的呢??看着不像TOOLBAR又不像是按钮。
      

  4.   

    楼主,你的BUTTON是用什么方法创建的?哪个类?这篇文章你看了没, 我是参照这个的。http://www.codeproject.com/KB/shell/ietoolbartutorial.aspx
      

  5.   

    还是看不到,先传到你的CSDN空间相册里,然后再发链接吧。
      

  6.   

    file:///C:/Documents%20and%20Settings/Administrator/桌面/11.jpg
      

  7.   

    lz你的贴的是html地址:
    http://hi.baidu.com/xiaoxiaodianzi/album/item/cfa719ded2630fe4b7fd482a.html
      

  8.   


    看了, Codeproject上的所有Toolbar的项目都看了, 结果都没我想要的内容
      

  9.   


    部长的意思是用microsoft statusbar control控件??   看样子很像,就用它试试
      

  10.   

    http://www.codeproject.com/KB/shell/ietoolbartutorial.aspx它这个是设置的第一个按钮的位置, Toolbar也只让你设置第一个按钮的位置.
    它将按钮的位置设置到右边, 以后再加入进去的按钮也还是在右边, 所有的都在右边了TB_SETINDENT Message--------------------------------------------------------------------------------Sets the indentation for the first button in a toolbar control. Syntax
    To send this message, call the SendMessage function as follows. 
    lResult = SendMessage(      // returns LRESULT in lResult     (HWND) hWndControl,      // handle to destination control     (UINT) TB_SETINDENT,      // message ID     (WPARAM) wParam,      // = (WPARAM) (INT) iIndent;    (LPARAM) lParam      // = 0; not used, must be zero );  
      

  11.   

    看不到图么?再贴次CSDN上的
    http://hi.csdn.net/attachment/201007/5/418291_1278317571CGtC.jpg
      

  12.   

    以后再加入进去的按钮也还是在右边, 所有的都在右边了
    -------------------------------
    这样就达到了你的右对齐效果啊, 你只要把EDIT控件的大小填满空白区域,所有的按钮就会被挤到右边了。
    能否把你的代码发给我看下,我帮你分析分析。[email protected]
      

  13.   


    IE上的用的TOOLBAR, 也就是个TOOLBAR.
      

  14.   

    TB_SETINDENT Message 是设置位置索引,但是CREATE和ADD按钮的代码是比较麻烦的我原来在网上看到了相关的帖子,很多人都说只能添加一个BUTTON进去,代码如下:TBBUTTON Button;
    ZeroMemory((void*)&Button, sizeof(TBBUTTON));
    Button.idCommand = IDM_GETQUOTE;
    Button.fsState = TBSTATE_ENABLED;
    // Button.fsStyle = BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT;
    Button.dwData = 0;
    Button.iString = iIndex;
    Button.iBitmap = 0;
    ::SendMessage(m_hWnd, TB_INSERTBUTTON, 0, (LPARAM)&Button);如果继续添加其它按钮,显示会有问题,必须先把IE toolbar先隐藏再显示才能显示出其它的按钮。有人说知道怎么解决,但没有说出来,不知道楼主能否把真相大白天下?
      

  15.   

    最终的想实在的效果就是类似于百度, GOOGLE工具栏的效果. 左边按钮左对齐, 右边按钮右对齐.
      

  16.   


    不会呀, 动态添加按钮一样没问题, 只要把Toolbar的样式设置好了就没问题.我的代码:
    /*  */
    void CXXToolbar::Insert_Button(LPCTSTR srText, int nImg, UINT nCmd, int nIndex, UINT nStyle)
    {
    int nStr = (int)::SendMessage(m_hWnd, TB_ADDSTRING, 0,(LPARAM)srText); TBBUTTON Button;
    ZeroMemory((void*)&Button, sizeof(TBBUTTON));
    Button.iString = nStr;
    Button.iBitmap = nImg;
    Button.idCommand = nCmd;
    Button.fsState = TBSTATE_ENABLED;
    Button.fsStyle = nStyle; ::SendMessage(m_hWnd, TB_INSERTBUTTON, 
    (nIndex == -1) ? Get_Button_Count() : nIndex,
    (LPARAM)&Button);
    }调用的时候:
    Insert_Button(_T("Options"), 4, IDM_CONFIG);
    Insert_Button(_T("Login"), 5, IDM_LOGIN);
      

  17.   


    添加一个按钮这个问题, 我好像也遇到一次, 我一次加入了4个Button, 但显示的时候只有一个, 测试发现是Toolbar的一样式有问题, 就是所有的Button, 不是水平排列的, 全是垂直排列的
      

  18.   

    原来如此需要设置Toolbar样式,如果你的代码不涉及什么公司机密的话,可以发到我的邮箱里,我明天帮你研究研究,看看有什么解决方法没有,我以前也研究过一段时间。
      

  19.   


    嗯, http://www.codeproject.com/KB/shell/ietoolbartutorial.aspx的代码中, 创建Toolbar的时候有这么一个样式: TBSTYLE_WRAPABLE (大概的效果就是将所有的按钮显示在不同的行)去掉后, 全都显示在同一行了. 项目代码不太好传, 大概的效果我上面都说得差不多了, Toolbar左右都分布有按钮. 不知百度, GOOGLE是怎么实现的.
      

  20.   

    自己想了下可能的方案:1. 全用两个Toolbar, 先创建一个, 再在该toolbar上创建另一个, 设置新toolbar位置在右边.
         但我用Spy++看百度工具条时, 发现它只有一个toolbar.2. 自己写个toolbar, 想怎样就怎样. (系统的toolbar不让控件每个按钮的RECT)不过, 最好还是用系统的, 如果系统存在这种可行方案的话
      

  21.   

    百度那样的按钮下拉箭头和菜单你也都实现了?能不能把你的TOOLBAR的截图发个上来看看效果,自己创建一个工具栏有点太麻烦了。
      

  22.   

    这个是一个国外的TOOLBAR,完全是自绘的,但是启动有点慢!
      

  23.   


    按钮下拉箭头: 可以这样, 
    SendMessage(m_hWnd, TB_SETEXTENDEDSTYLE, 0, (LPARAM)TBSTYLE_EX_DRAWDDARROWS);添加按钮的时候使用 BTNS_DROPDOWN, 或者 BTNS_WHOLEDROPDOWN菜单很好实现的.
      

  24.   

    我想到一个思路,你可以不用系统默认的TBBUTTON Button, 而是自己创建几个BUTTON控件放上去,这样就可以想怎么放就怎么放!另外你的编译环境是VC几?我VC6下出来的按钮效果为什么是鼠标放上去是2000的效果而不是XP的效果啊?
    另外BTNS_WHOLEDROPDOWN属性添加上去了,鼠标按下去没反应,是不是还需要添加什么消息响应?
    我的正常按钮消息是通过ONCOMAND消息响应的,但是下拉菜单按钮消息好像是什么ONNOTIFYREFLE什么的,不知道怎么获取?
      

  25.   

    实现了, 还是用TOOLBAR自身的内容, 只是要多创建一个BUTTON (作为分隔符), 样式为: BTNS_BUTTON | BTNS_SHOWTEXT, (必须指定ShowText样式, 不然不能修改宽度, 也不能指定AutoSize哟).当窗口大小改变时, 改变该分隔BUTTON的宽度, 发送TB_SETBUTTONINFO消息晕, 搞了谈天, 结果这么简单, 浪费我的时间呀...这种左右分布的工具栏在商业工具栏中应用比较多, 希望比有兴趣的朋友有帮助!感谢wwgddx的热心帮助!
      

  26.   


    确实没反应, 应该要响应什么事件吧, 我没试过, 不过Codeproject上有个项目用过这个的...