博客日历
2024年11月 | ||||||
一 | 二 | 三 | 四 | 五 | 六 | 七 |
28 | 29 | 30 | 31 | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 1 |
存档
2024年03月 04月 05月 2021年
01月 02月 11月 12月 2020年
02月 03月 04月 05月 06月 07月
09月 2018年
09月 2017年
01月 02月 07月 2016年
01月 04月 07月 08月 11月 12月
2015年
01月 02月 03月 05月 09月 10月
11月 2014年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2013年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2012年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2011年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2010年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2009年
03月 04月 05月 06月 07月 08月
09月 10月 11月 12月
LibCef的使用4-窗口大小自适应
窗口大小自适应需要响应WM_SIZE消息,但是在Dlg类中如何获取浏览器的子窗口呢?下面继续修改MyCefClient类。
MyCefClient.h的内容如下:
#include <include/cef_client.h> #include <include/base/cef_lock.h> #include <include/cef_life_span_handler.h> class MyCefClient : public CefClient, public CefLifeSpanHandler { protected: // 实现的每个Handler都需要返回this指针 virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() override; virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) override; virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) override; public: CefRefPtr<CefBrowser> GetBrowser() const; private: IMPLEMENT_REFCOUNTING(MyCefClient); mutable base::Lock lock_; CefRefPtr<CefBrowser> browser_ ; };
MyCefClient.cpp的内容如下:
CefRefPtr<CefLifeSpanHandler> MyCefClient::GetLifeSpanHandler() { return this; } CefRefPtr<CefBrowser> MyCefClient::GetBrowser() const { base::AutoLock lock_scope(lock_); return browser_; } void MyCefClient::OnAfterCreated(CefRefPtr<CefBrowser> browser) { if (!GetBrowser()) { base::AutoLock lock_scope(lock_); browser_ = browser; } } void MyCefClient::OnBeforeClose(CefRefPtr<CefBrowser> browser) { base::AutoLock lock_scope(lock_); browser_ = NULL; }
这部分代码的最终目的只有一个,就是提供一个GetBrowser()函数,使Dlg类中可以得到当前浏览器窗口。
接下来,就可以在OnSize中调整浏览器窗口大小了。
void CHelloCefDlg::OnSize(UINT nType, int cx, int cy) { if (handler != NULL) { CefRefPtr<CefBrowser> browser = handler->GetBrowser(); if (browser) { CefWindowHandle hwnd = browser->GetHost()->GetWindowHandle(); ::MoveWindow(hwnd, 0, 0, cx, cy, TRUE); } } CDialogEx::OnSize(nType, cx, cy); }
上一篇: LibCef的使用3-从最简单的项目开始
下一篇: LibCef的使用5-所有链接在同一窗口打开
分类:Win32/C++ 查看次数:631 发布时间:2020/5/4 7:57:33