gpt4 book ai didi

c++ - CEF 3 无边框窗口

转载 作者:行者123 更新时间:2023-11-28 05:00:15 24 4
gpt4 key购买 nike

我是 CEF 的新手,我正在尝试在 ubuntu 12.04 x64 上创建新的无边界浏览器(仅用于网页查看)。目前我已经尝试过这种方式(gtk 顶级窗口 -> 禁用装饰 -> 将父级设置为以前创建的窗口的窗口信息 -> 创建浏览器):

GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_decorated (GTK_WINDOW(window), FALSE);
CefWindowHandle window_handle = GDK_WINDOW_XWINDOW (GTK_WIDGET (window)->window);

CefWindowInfo window_info;
window_info.SetAsChild(window_handle, CefRect(100, 100, 800, 600));

CefBrowserHost::CreateBrowser(window_info, handler, url, browser_settings, NULL);

但这只会在指定位置以正确的宽度/高度打开浏览器,但它仍然有边框。

另一方面,我已经成功地在 Windows 上创建了无边界浏览器窗口,只有:

CefWindowInfo window_info;
window_info.style = WS_VISIBLE | WS_POPUP;
window_info.x = 2120;
window_info.y = 200;
window_info.width = 800;
window_info.height = 600;

CefBrowserHost::CreateBrowserSync(window_info, handler, url, browser_settings, NULL);

注意:

  • 我无法重建整个 CEF,
  • 我无法升级 Ubuntu。

最佳答案

我用 X11 窗口管理器解决了这个问题。

首先,我创建了一个用于删除窗口边框的函数:

#include <X11/Xlib.h>

static void RemoveBorders(Window window) {
struct Data {
unsigned long flags;
unsigned long functions;
unsigned long decorations;
long inputMode;
unsigned long status;
} data = {2, 0, 0, 0, 0};
auto display = cef_get_xdisplay();
auto atom = XInternAtom(display, "_MOTIF_WM_HINTS", True);
XChangeProperty(display, window, atom, atom, 32, PropModeReplace, (unsigned char*)&data, 5);
}

之后,当我创建浏览器时,我会同步创建它以检索创建的浏览器句柄并在浏览器窗口句柄上调用 RemoveBorders 函数:

...
auto browser = CefBrowserHost::CreateBrowserSync(window_info, handler, url, browser_settings, NULL);
RemoveBorders(browser->GetHost()->GetWindowHandle());
...

关于c++ - CEF 3 无边框窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46213163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com