CEF1の例で透明な背景を実現するために、 LWA_COLORKEYで SetLayeredWindowAttributesを使用して色 (#ff00ff) を透明度に置き換えます。
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 に接続すると、透過性が期待どおりに表示されます。
誰かがこれを説明できますか?