我使用带有 LWA_COLORKEY 的SetLayeredWindowAttributes来用透明度替换颜色 (#ff00ff),以便在CEF1示例中实现透明背景。
它在 7/Vista 上运行良好。
在 Windows XP 上,该函数成功,但颜色仍然不透明。
我创建主窗口的代码:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) {
HWND hWnd;
hInst = hInstance;
hWnd = CreateWindowEx(WS_EX_LAYERED | WS_EX_TOPMOST | WS_EX_COMPOSITED, szWindowClass, szTitle,
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_VISIBLE, CW_USEDEFAULT, 0,
CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
主窗口的 WndProc:
switch (message) {
case WM_CREATE: {
...
info.SetTransparentPainting(TRUE);
info.SetAsChild(hWnd, rect);
// Create the new child browser window
CefBrowser::CreateBrowser(info,
static_cast<CefRefPtr<CefClient> >(g_handler),
url_to_pageWithMagentaBackground, settings);
SetLayeredWindowAttributes(hWnd, RGB(0xff, 0x00, 0xff), 0xff, LWA_COLORKEY);
显示的HTML:
<style type="text/css">html { background: #ff00ff; }</style>
请注意以下几点:
它确实适用于带有 LWA_ALPHA 的 XP(使整个窗口半透明),但不适用于 LWA_COLORKEY
当我通过远程桌面连接到 XP 时,我确实看到了预期的透明度!
有人可以解释一下吗?