Рисование системного курсора, самый верхний, где угодно - PullRequest
1 голос
/ 17 сентября 2010

Мне нужно нарисовать системный курсор, который я могу просто контролировать положение. Другими словами, мне нужно нарисовать прозрачное изображение, которое выглядит точно так же, как системный курсор, и мне нужно, чтобы оно отображалось поверх всех других окон. Я перепробовал несколько подходов, но у них у всех есть свои недостатки.

Я понял, что могу загрузить изображение курсора, используя 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);

И имея цвет фона моего окна, чтобы быть черным, я могу удалить фон из окна. Но из-за того, что я делаю альфу на основе цвета, вокруг моего курсора появляются уродливые черные пиксели.

Можно ли сделать фон окна прозрачным другим способом, кроме использования цветовой маски?

Как правильно нарисовать прозрачный курсор поверх всех окон?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2010

Разве контур курсора не черный? Проблема в том, что вы тоже делаете контур прозрачным? Почему бы вам просто не изменить цвет прозрачности (и цвет фона окна) на что-нибудь отличное , кроме черного или белого?

0 голосов
/ 17 сентября 2010

Я бы порекомендовал вам сделать свое собственное окно и сделать что-то вроде того, что описано в http://www.codeproject.com/KB/GDI-plus/CsTranspTutorial3.aspx. Это в C #, но в большинстве случаев это просто вызовы win32. Он отлично справляется и с переменной прозрачностью, а не только с 0% / 100%.

...