5

いくつCFrameWndExかのドッキングCDockablePanesがありますが、ドッキングされたペインのサイズが変更されたときに通知が届かないようです(それに応じて他のウィンドウのサイズを変更できます)。Spy ++を試してメッセージをチェックしましたが、カスタム描画が唯一のようで(適切ではないようです)、RecalcLayoutをオーバーライドしようとしましたが、この状況では呼び出されません。 OnSizeフレーム自体のサイズは変更されていないため、機能しません。何か案は?

(追記:「クライアント」領域としてスプリッターウィンドウを使用していたので、それが可能であると確信しています。ペインのサイズが変更されると、魔法のようにサイズが変更されます)

4

2 に答える 2

3

OK、これは少し奇妙ですが、まったく同じ質問があり、Googleで検索したところ、1年以上前にこの質問に回答したことがわかりましたが、質問の内容を完全に誤解していました:)

とにかく、人々を使用する将来のGoogleの参照のために、この質問への答えは、仮想vo​​id CFrameWndEx :: EAdjustDockingLayout(HDWP hdwp)をオーバーライドし、そこでクライアントコントロールのサイズ変更を行うことです。ペインの非表示/終了/その他の後にクライアント領域を取得するには、m_dockManager.GetClientAreaBounds()を使用します。私のAdjustDockingLayoutは次のようになります(m_Viewは、ドッキングペインの状態に関係なく、クライアント領域全体を埋めるはずの子ウ​​ィンドウです。必要に応じて調整してください):

void CMainFrame::AdjustDockingLayout(HDWP hdwp)
{
    CFrameWndEx::AdjustDockingLayout(hdwp);

    if (m_View.GetSafeHwnd()) {
        CRect rectUsable = m_dockManager.GetClientAreaBounds();
        m_View.MoveWindow(rectUsable);
    }
}
于 2013-06-08T12:21:32.460 に答える
0

問題は、CFrameWndExの「コンテンツ」自体がウィンドウであり、そのウィンドウに「メインコンテンツ」ウィンドウが存在することだと思います。ウィンドウ階層についてはSpy++で確認し、CFrameWndExの子ウィンドウ(ドッキング可能なペイン以外)のいずれかがサイズ変更されたときにメッセージを受け取るかどうかを確認します。基本的に、ドッキングペインがドッキングされると、CFrameWndExはその子のサイズを変更するため、そこで検出し、必要に応じてメッセージをCFrameWndExに反映する必要があります。

あるいは、私は誤解している可能性があり、あなたがやろうとしていることを正確に説明したものです。その場合、ウィンドウをCFrameWndExに追加する方法に問題があると思います。これは、サイズ変更自体を処理する必要があるためです。子ウィンドウの親は、作成時にCFrameWndExに正しく設定されていますか?

于 2012-04-11T15:13:15.023 に答える