Я разрабатываю систему пользовательского интерфейса, в которой есть все эти умные функции, такие как отрыв и стыковка панели и т. Д. Сейчас моя задача - создать наложение на экране, которое показывает положение, или пристыкованная панель приземлится. Почти такая же вещь, что и визуальная студия. Для этого я использую пользовательский слоистый класс окон, который будет отображаться, когда это необходимо. После этого я начал рыть, чтобы добиться необходимого эффекта. Я работал с стандартными функциями GDI раньше и, в основном, они в порядке. Но на этот раз я последовал рекомендациям по документации, чтобы использовать UpdateLayeredWindow для моих задач и загрузить 32-битное изображение из растрового изображения вместо того, чтобы рисовать его с помощью функций GDI. Итак, у меня есть 128x128pixel широкий BMP с 222 в альфа-канале и 255 0 0 в RGBWin32 LayeredWindow дает плохой визуальный эффект
Вот методы, которые я использую для инициализации и рисования.
void Init(HDC in_hdc,HWND in_hwnd)
{
bf = { 0, 0, 200, AC_SRC_ALPHA };
hwnd = in_hwnd;
hdc_mem = CreateCompatibleDC(in_hdc);
hBitmap_mem = CreateCompatibleBitmap(in_hdc, canvas_size.cx, canvas_size.cy);
hBitmap_mem_default = (HBITMAP)SelectObject(hdc_mem, hBitmap_mem);
hdc_bitmap = CreateCompatibleDC(in_hdc);
}
void DrawArea(RECT& in_rect)
{
hBitmap_area_default = (HBITMAP)SelectObject(hdc_bitmap, hBitmap_area);
AlphaBlend(hdc_mem, in_rect.left, in_rect.top, in_rect.right, in_rect.bottom, hdc_bitmap, 0, 0, 2, 2, bf);
hBitmap_area = (HBITMAP)SelectObject(hdc_bitmap, hBitmap_area_default);
}
void Update()
{
POINT p = { 0, 0 };
HDC hdc_screen = GetDC(0);
UpdateLayeredWindow(hwnd, hdc_screen, &p, &canvas_size, hdc_mem, &p, 0, &bf, ULW_ALPHA);
}
Стиль окно имеет это отдельно оплачиваемые предметы WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_TOPMOST
И вот что я получаю. Итак, вы можете видеть, что происходит смешение. Принимает во внимание альфа-пиксель, но выполняет плохую работу смешивания. Любые идеи, как настроить его?
Почему вы используете 200 в своей структуре функций смешивания. Для значений альфа-пикселей вам нужно использовать 255. –