Мне нужно нарисовать системный курсор, который я могу просто контролировать положение.
Другими словами, мне нужно нарисовать прозрачное изображение, которое выглядит точно так же, как системный курсор, и мне нужно, чтобы оно отображалось поверх всех других окон.
Я перепробовал несколько подходов, но у них у всех есть свои недостатки.
Я понял, что могу загрузить изображение курсора, используя LoadImage (), передав ресурс OCR_NORMAL и приведя его к HBITMAP.
HICON NormalCursor = (HICON)LoadImage(NULL, MAKEINTRESOURCE(OCR_NORMAL), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);
Тогда получается «настольный» HDC
hDC = GetDC(NULL);
Тогда я могу попытаться нарисовать его, используя DrawIconEx ()
DrawIconEx(hDC, (int)x, 0, NormalCursor, 0, 0, NULL, NULL, DI_DEFAULTSIZE | DI_NORMAL);
Флаг DI_NORMAL должен объединять флаги DI_IMAGE и DI_MASK, давая мне прозрачное изображение / значок / курсор, но это мой результат на рабочем столе:
Изображение
Не говоря уже о том, что если он движется, он создает следы.
Путем создания прозрачного окна с использованием SetLayeredWindowAttributes следующим образом:
SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 50, LWA_COLORKEY);
И имея цвет фона моего окна, чтобы быть черным, я могу удалить фон из окна. Но из-за того, что я делаю альфу на основе цвета, вокруг моего курсора появляются уродливые черные пиксели.
Можно ли сделать фон окна прозрачным другим способом, кроме использования цветовой маски?
Как правильно нарисовать прозрачный курсор поверх всех окон?