Создание прозрачного окна в C++ Win32

Я создаю то, что должно быть очень простым Win32 приложение C++, кто единственная цель оно, чтобы ТОЛЬКО отобразить полупрозрачный PNG. Окно не должно иметь никакого хрома, и всей непрозрачностью нужно управлять в самом PNG.

Моя проблема состоит в том, что окно не перекрашивает, когда содержание под изменениями окна, таким образом, прозрачные области PNG застревают с тем, что находилось под окном, когда приложение было первоначально запущено.

Вот строка, где я устанавливаю новое окно:

hWnd = CreateWindowEx(WS_EX_TOPMOST, szWindowClass, szTitle, WS_POPUP, 0, height/2 - 20, 40, 102, NULL, NULL, hInstance, 0);

Для вызова к RegisterClassEx у меня есть этот набор для фона:

wcex.hbrBackground = (HBRUSH)0;

Вот мой обработчик для сообщения WM_PAINT:

 case WM_PAINT:
 {
   hdc = BeginPaint(hWnd, &ps);
   Gdiplus::Graphics graphics(hdc);
   graphics.DrawImage(*m_pBitmap, 0, 0);
   EndPaint(hWnd, &ps);
   break;
 }

Одна вещь отметить состоит в том, что приложение всегда прикрепляется слева от экрана и не перемещается. Но, что под приложением, может измениться, когда пользователь открывает, закрывает или перемещает окна под ним.

Когда приложение сначала запускается, это выглядит прекрасным. Прозрачные (и simi-прозрачный) части PNG показывают через отлично. НО, когда фон под изменениями приложений, фон не обновляет, он просто остается таким же от когда приложение, сначала запущенное. На самом деле, WM_PAINT (или WM_ERASEBKGND не становится названным, когда фон изменяется).

Я играл с этим долгое время и был рядом с разбиранием в 100%, но не совсем там. Например, я попытался установить предпосылки к (HBRUSH) NULL_BRUSH, и я попытался обработать WM_ERASEBKGND.

Что может быть сделано, чтобы заставить окно перекрашивать, когда содержание под ним изменяется?

44
задан Tim 19 October 2010 в 15:46
поделиться