gpt4 book ai didi

c++ - 在任何地方绘制一个类似系统的光标,最顶层

转载 作者:太空宇宙 更新时间:2023-11-04 14:26:17 26 4
gpt4 key购买 nike

我需要绘制一个我可以简单地控制其位置的类似系统的光标。换句话说,我需要绘制一个看起来像系统光标的透明图像,并且我需要将它呈现在所有其他窗口之上。我尝试了多种方法,但它们似乎都有一些缺点。

我发现我可以通过使用 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 标志给我一个透明的图像/图标/光标,但这是我在桌面上的结果:

enter image description here

更不用说,如果它移动,它会留下痕迹。

通过像这样使用 SetLayeredWindowAttributes 制作透明窗口:

SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 50, LWA_COLORKEY);

并且将窗口的背景色设置为黑色,我可以从窗口中删除背景。但是由于基于颜色进行 alpha 处理,我的光标图标周围出现了丑陋的黑色像素。

除了使用颜色 mask 之外,我能否通过其他方式使窗口背景透明?

如何在所有窗口上方正确绘制透明光标?

最佳答案

我建议您制作自己的窗口,并按照 http://www.codeproject.com/KB/GDI-plus/CsTranspTutorial3.aspx 中描述的方式进行操作.它在 C# 中,但大部分只是 win32 调用。它在可变透明度方面也做得很好,而不仅仅是 0%/100%。

关于c++ - 在任何地方绘制一个类似系统的光标,最顶层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com