Я создаю то, что должно быть очень простым 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.
Что может быть сделано, чтобы заставить окно перекрашивать, когда содержание под ним изменяется?