2

Webブラウザコントロールをホストするカスタムエクスプローラバー(バンドオブジェクト)があります。WebBrowserコントロールを適切に初期化し、Webページを表示させることができます。

ただし、エクスプローラーバーのサイズを変更すると、Webブラウザーコントロールがバーのサイズに適切にサイズ変更されないことに気付きました。

サイズ変更前:

サイズ変更前

サイズ変更後:

サイズ変更後

処理する必要のあるイベントと、ブラウザコントロールのサイズを変更できるものがわかりません。私は.NETプログラミングの経験がありますが、実際にはWindowsプログラミングの経験はありません。

さらに詳しく知りたい場合は、ここにソースコードも含めました。

4

2 に答える 2

2

通常、OLE コントロールをホストするコンテナーのサイズが変更されると、コンテナーは埋め込みオブジェクトに IOleInPlaceObject インターフェイスを照会し、そのインターフェイスで SetObjectRects() を使用してコントロールに新しいサイズを伝えます。

于 2009-01-16T07:07:21.343 に答える
0

この「回答」は元の質問とは直接関係ありませんが、非常によく似た問題の解決策を見つけようとしているときに、このページに出くわしました。

スプリッターを動かすたびに、常に元の位置に戻ってきました。DESKBANDINFOモード フラグは、垂直サイドバーに対して特に適切な名前が付けられていないことが判明しました。DBIMF_NORMAL使うべき時に使っていましDBIMF_VARIABLEHEIGHTた。

コード例:

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;
}
于 2009-05-03T22:23:50.427 に答える