我需要绘制一个类似系统的光标,我只能控制它的位置。 换句话说,我需要绘制一个看起来就像系统光标的透明图像,我需要将它渲染到所有其他窗口之上。 我尝试了多种方法,但它们似乎都有一些缺点。
我已经想通过使用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);
我的窗口背景颜色为黑色,我可以从窗口中删除背景。但由于基于颜色做alpha,我的光标图标周围会出现难看的黑色像素。
我可以使用彩色蒙版以其他方式使窗口的背景透明吗?
如何在所有窗口的顶部正确绘制透明光标?
答案 0 :(得分:0)
我建议您制作自己的窗口,并执行http://www.codeproject.com/KB/GDI-plus/CsTranspTutorial3.aspx所述的操作。它在C#中,但大多数只是win32调用。它在可变透明度方面也做得很好,不仅仅是0%/ 100%。
答案 1 :(得分:0)
光标的轮廓是不是黑色?问题只是你使轮廓透明吗?为什么不直接将透明度颜色(和窗口的背景颜色)更改为其他而不是黑色或白色?