ウィンドウサイズ変更後の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);
}