Cefブラウザはウィンドウサイズの変更に従います

ウィンドウサイズ変更後のCefブラウザの問題について

CefClientで「CefLifeSpanHandler」コールバッククラスを継承し、「GetLifeSpanHandler」をオーバーロードして「this」を返します。詳細なコードは次のとおりです。
 

virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() OVERRIDE {
        return this;
}

次に、CefClient.hファイルに名前空間を追加します。その役割はグローバル変数にアクセスすることです。詳細なコードは次のとおりです。

namespace {
    // cef 浏览器的句柄
    CefWindowHandle CefHwnd = NULL;
}

ここでハイライト、つまり、Cefブラウザーのハンドルを取得し、「CefLifeSpanHandler」コールバッククラスの関数「OnAfterCreated」をオーバーロードする方法です。その関数は、「新しいブラウザーの作成後に呼び出す」ことです。パラメーターCefRefPtr < CefBrowser> browser "がブラウザオブジェクトに渡されます。詳細なコードは次のとおりです。

virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) {

        // 获取句柄
		::CefHwnd = browser->GetHost()->GetWindowHandle();
}

Cefブラウザはウィンドウに従って移動し、WndProcでメッセージ「WM_SIZE」を処理し、MoveWindowを使用します。詳細なコードは次のとおりです。


if (::CefHwnd != NULL) {

			RECT WindowUserClientRect;
			GetClientRect(hwnd, &WindowUserClientRect);

            // 最后一个参数必须为 'false' 否则移动的时候会闪屏
			MoveWindow(::CefHwnd, 0, 0, WindowUserClientRect.right,         
            WindowUserClientRect.bottom, false);
}

 

おすすめ

転載: blog.csdn.net/qq_37736666/article/details/114164400