我用ShowBrowserBar显示工具条,总是停在地址栏右边显示为一小条,而GOOGLE的却是单独的一行显示在地址栏下面(都是第一次使用,也就是注册表中没有工具条位置信息的时候)......MSDN中ShowBrowserBar函数的说明:ShowBrowserBar Method  Internet Development Index --------------------------------------------------------------------------------Shows or hides a specified browser bar.Syntaxobject.ShowBrowserBar( _
    vClsID As Variant, _
    [bShow As Variant,] _
    vSize As Variant)
ParametersvClsID
Variant of type String that specifies the class identifier of the browser bar to show or hide. This object must be registered as an Explorer Bar object with the CATID_InfoBand component category. For more information, see Creating Custom Explorer Bars, Tool Bands, and Desk Bands. 
bShow
Optional. Variant of type Boolean that specifies if the browser bar should be shown or hidden. false
Browser bar is hidden.
true
Browser bar is shown.vSize
Not currently used. 
ResThe WebBrowser object ignores this method.A View menu item in Microsoft Internet Explorer enables users to show or hide browser bars, which are also known as Explorer Bars.The standard browser bars use the following class identifiers: Browser Bar Name Class ID 
Search {30D02401-6A81-11D0-8274-00C04FD5AE38} 
Favorites {EFA24E61-B078-11D0-89E4-00C04FC9E26E} 
History {EFA24E62-B078-11D0-89E4-00C04FC9E26E} 
Channels {EFA24E63-B078-11D0-89E4-00C04FC9E26E}  
其中的vSize真的没有用吗?那么GOOGLE的工具条如何做到的?

解决方案 »

  1.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/structures/deskbandinfo.asp
      

  2.   

    TO  jiangsheng(蒋晟.MSMVP2004Jan) 
    我知道这个结构,但这个结构是在GetBandInfo事件中使用的,难道ShowBrowserBar的第三个参数也是这个?请明示
      

  3.   

    标准的,也是最好的办法是在你的工具条之外再实现一个Browser Helper Object(BHO),比如下面的CShowBarObj,并在IObjectWithSite::SetSite方法中调用IWebBrowser2的ShowBrowserBar函数来显示你的工具条。VC中的例子如下:STDMETHODIMP CShowBarObj::SetSite(IUnknown *pUnkSite)
    {
       if (NULL != pUnkSite)
       {
          IWebBrowser2 *pBrowser = NULL;
          // Ensure that our site is an browser window
          HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **) &pBrowser);
          if (SUCCEEDED(hr))
          {
             // Display the band object (the Search bar in this case)
             VARIANT vtBandGUID, vtShow;
             vtBandGUID.vt = VT_BSTR;
             //把这里的CLSID换成你的工具条CLSID
             vtBandGUID.bstrVal = SysAllocString(OLESTR("{30D02401-6A81-11D0-8274-00C04FD5AE38}"));
             vtShow.vt = VT_BOOL;
             vtShow.boolVal = true;
             pBrowser->ShowBrowserBar(&vtBandGUID, &vtShow, 0);
             SysFreeString(vtBandGUID.bstrVal);
             pBrowser->Release();
          }
       }
       return S_OK;
    }
      

  4.   

    看過了 ShowBrowserBar 的幫助, 似乎這個無法解決問題!我想, IE 一定會有個工具條的layout保存各個的位置在註冊表, 也許修改這個才對
      

  5.   

    TO ksaiy:
      我已经实现BHO,也使用了ShowBrowserBar,但SHOW出来却停在地址栏右边,显示一小条....要拉出来TO aiirii(ari-爱的眼睛):
      是的,我也注意到注册表中:
    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar\WebBrowser\ITBarLayout
    键下是保存的位置信息,但却不知道这串二进制数据的格式...
    删除这个键值的话,启动IE,GOOGLE的工具条会单独一行显示出来,而一般的却根本没有显示....
      

  6.   

    >>你提前的太频繁了!!!
    一天一次都不行呀?
      

  7.   

    >>记住能让你的工具栏单独一行显示的键值>>启动的时候写入注册表信息?>>这样不知道可行否
      

  8.   

    看看你的控件再實現IDeskband接口的GetBandInfo, 并且指定 DBIMF_BREAK, 試下, 應該可以解決   {IDeskband}
        function GetBandInfo(dwBandID, dwViewMode: DWORD; var pdbi: TDeskBandInfo):
          HResult; stdcall;
    (pdbi.dwModeFlags := DBIMF_BREAK;)
      

  9.   

    http://dev.csdn.net/article/7/7099.shtmIDeskband的實現, GetBandInfo的用法大概可參考這裹
      

  10.   

    问题解决,DBIMF_BREAK在DELPHI中没有定义,得自己加上
      DBIMF_BREAK = $0100;
    结贴...