我将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时,我确实看到了预期的透明度!
有人可以解释一下吗?