SetLayeredWindowAttributes使CEF透明无法在Windows XP上运行

时间:2013-05-21 18:23:27

标签: windows winapi google-chrome windows-xp chromium-embedded

我将SetLayeredWindowAttributes与LWA_COLORKEY一起用透明度替换颜色(#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>

请注意以下几点:

  • 它可以在XP上使用LWA_ALPHA(使整个窗口半透明), 但不适用于LWA_COLORKEY

  • 当我通过远程桌面连接到XP时,我确实看到了预期的透明度!

有人可以解释一下吗?

0 个答案:

没有答案