1

我使用带有 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 时,我确实看到了预期的透明度!

有人可以解释一下吗?

4

0 回答 0