gpt4 book ai didi

visual-c++ - Chrome 嵌入式 (CEF3)。如何调整新浏览器窗口的大小?

转载 作者:行者123 更新时间:2023-12-04 19:09:00 25 4
gpt4 key购买 nike

所以我正在使用 CEF v3.1180.823 并且我正在尝试制作具有多个选项卡的浏览器。

对于每个新标签,我是:

1) 创建一个样式为 WS_POPUPWINDOW 的新窗口。

HWND hWndTab = CreateWindowEx(NULL, w.lpszClassName, 0,
WS_POPUPWINDOW, x, y, width, height,
NULL, NULL, hInst, NULL);

2)创建一个新的“g_handler”
CefRefPtr<ClientHandler> cef_hTab = new ClientHandler();

3)创建新的浏览器
CefBrowserHost::CreateBrowser(info, cef_hTab.get(), _url, settings);

4)将此窗口设置为永远不会关闭的第一个(主)选项卡的子窗口
SetParent(hWndTab, g_handler->GetMainHwnd());

5) 将新窗口的 HWND 设置为新处理程序的主要 HWND
cef_hTab->SetMainHwnd(hWndTab);

我的问题是 :当主窗口调整大小时,我如何调整所有选项卡的大小?

默认窗口过程(即主选项卡的过程)具有以下代码:
case WM_SIZE:
// Minimizing resizes the window to 0x0
// which causes our layout to go all
// screwy, so we just ignore it.
if (wParam != SIZE_MINIMIZED &&
g_handler.get() &&
g_handler->GetBrowser())
{
CefWindowHandle hwnd =
g_handler->GetBrowser()->GetHost()->GetWindowHandle();
if (hwnd)
{
// Resize the browser window and
// address bar to match the new frame
// window size
RECT rect;
GetClientRect(hWnd, &rect);

rect.top += URLBAR_HEIGHT;

int urloffset = rect.left + BUTTON_WIDTH * 4;

HDWP hdwp = BeginDeferWindowPos(1);
hdwp = DeferWindowPos(hdwp, hwnd, NULL, rect.left, rect.top,
rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);
EndDeferWindowPos(hdwp);
}
}
break;

我有一个 std::list 标签:
#include <vector>
#include <list>
#include "include/cef_app.h"
#include "cefclient/binding_test.h"

using namespace std;

struct STab
{
HWND hWndTab;
HWND hWndTabButton;
CefRefPtr<ClientHandler> cef_handler;

void Destroy();
};

typedef list<STab> LTabs;

LTabs* GetTabs();

我正在尝试像这样编辑主窗口程序:
case WM_SIZE:
if (wParam != SIZE_MINIMIZED &&
g_handler.get() &&
g_handler->GetBrowser())
{
CefWindowHandle hwnd =
g_handler->GetBrowser()->GetHost()->GetWindowHandle();
if (hwnd)
{
RECT rect;
GetClientRect(hWnd, &rect);

rect.top += URLBAR_HEIGHT;

int urloffset = rect.left + BUTTON_WIDTH * 4;

HDWP hdwp = BeginDeferWindowPos(1);
hdwp = DeferWindowPos(hdwp, hwnd, NULL, rect.left, rect.top,
rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);
// added:
//------------------------------------------------------------------
LTabs* lTabs = GetTabs();
LTabs::iterator it;
for (it = lTabs->begin(); it != lTabs->end(); ++it)
{
CefWindowHandle hWndTab =
it->cef_handler->GetBrowser()->GetHost()->GetWindowHandle();
if (hWndTab)
hdwp = DeferWindowPos(hdwp, hWndTab, NULL,
rect.left, rect.top, rect.right - rect.left,
rect.bottom - rect.top, SWP_NOZORDER);
}
//------------------------------------------------------------------
EndDeferWindowPos(hdwp);
}
}
break;

但是在调整主窗口大小时,它既不会调整主选项卡的大小,也不会调整我的自定义选项卡的大小。

我究竟做错了什么?

最佳答案

快速解决方案是使用 SetWindowPos函数代替 DeferWindowPos功能。

//hdwp = DeferWindowPos(hdwp, hWndTab, NULL, 
// rect.left, rect.top, rect.right - rect.left,
// rect.bottom - rect.top, SWP_NOZORDER);
SetWindowPos(hWndTab, NULL, rect.left, rect.top,
rect.right - rect.left, rect.bottom - rect.top,
SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE);

关于visual-c++ - Chrome 嵌入式 (CEF3)。如何调整新浏览器窗口的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17588089/

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