2009-01-15 30 views
2

對於Windows編程而言,我非常新,對我來說很裸露。在IE瀏覽器欄中調整由瀏覽器欄託管的Webbrowser控件的大小

我有一個自定義瀏覽器欄(一個樂隊對象),承載一個瀏覽器控件。我可以正確初始化WebBrowser控件並讓它顯示網頁。

不過,我注意到,當我調整瀏覽器欄,WebBrowser控件不能適當地調整酒吧的大小:


調整大小前:

Before Resize

後調整大小:

After Resize

我不知道我需要處理哪些事件以及可以調整瀏覽器控件的大小。我在.NET編程方面有一些經驗,而且在Windows編程中沒有任何經驗。

如果您想更多地使用它,我還包含了我的源代碼here

謝謝!

回答

2

通常,當託管OLE控件的容器的大小被調整時,它將查詢嵌入對象的IOleInPlaceObject接口,並使用該接口上的SetObjectRects()來告知控件它的新大小。

0

此「答案」與原始問題沒有直接關係,但我在嘗試找到解決方案時遇到了類似問題。

每當我移動分離器時,它總是會回到原來的位置。結果發現,DESKBANDINFO模式標誌並不是特別適用於垂直側邊欄。當我應該使用DBIMF_VARIABLEHEIGHT時,我正在使用DBIMF_NORMAL

示例代碼:

STDMETHODIMP CMyExplorerBar::GetBandInfo(DWORD dwBandID, 
             DWORD dwViewMode, 
             DESKBANDINFO* pdbi) 
{ 
    if(pdbi) 
    { 
     m_dwBandID = dwBandID; 
     m_dwViewMode = dwViewMode; 

     if(pdbi->dwMask & DBIM_MINSIZE) 
     { 
      pdbi->ptMinSize.x = 30; 
      pdbi->ptMinSize.y = 30; 
     } 

     if(pdbi->dwMask & DBIM_MAXSIZE) 
     { 
      pdbi->ptMaxSize.x = -1; 
      pdbi->ptMaxSize.y = -1; 
     } 

     if(pdbi->dwMask & DBIM_INTEGRAL) 
     { 
      pdbi->ptIntegral.x = 1; 
      pdbi->ptIntegral.y = 1; 
     } 

     if(pdbi->dwMask & DBIM_ACTUAL) 
     { 
      pdbi->ptActual.x = 500; 
      pdbi->ptActual.y = 0; 
     } 

     if(pdbi->dwMask & DBIM_TITLE) 
     { 
      StringCchCopy(pdbi->wszTitle, 256, L"My Sidebar"); 
     } 

     if(pdbi->dwMask & DBIM_MODEFLAGS) 
     { 
      pdbi->dwModeFlags = DBIMF_VARIABLEHEIGHT; 
     } 

     if(pdbi->dwMask & DBIM_BKCOLOR) 
     { 
      pdbi->dwMask &= ~DBIM_BKCOLOR; 
     } 

     return S_OK; 
    } 

    return E_INVALIDARG; 
}