c++ - 设置像素函数 [C++]

标签 c++ pixel

为什么当我调用 SetPixel 函数在 iTunes 中设置像素时,它确实显示了该特定应用程序中的像素(就像它应该的那样),而当为 Windows Media Player 调用相同的函数时它却不显示在全部。此外,此功能似乎也不适用于全屏窗口。为什么会有如此大的多样性?任何解释将不胜感激。提前致谢。

最佳答案

如前所述,很容易得不到您期望的结果,因为它不是您的窗口,您最终无法控制它的作用!

可以做的两件事(一件显然比另一件好)是:

  • 使用 GetDC (NULL) 获取屏幕设备上下文的句柄。使用 ClientToScreen计算像素在屏幕上的位置。使用该句柄调用 SetPixel。不过,这很快就会被清除。

  • 使用适当的颜色键创建您自己的顶级、弹出式、透明(对消息)、分层窗口。使用 ClientToScreen计算屏幕的位置,可能还有ScreenToClient确保它正确地进入您的窗口(理论上应该与屏幕具有相同的客户端尺寸)。将像素绘制到您的窗口上,您将控制它何时离开。

如果使用第二种,你的扩展窗口样式应该是:

WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_LAYERED

你的正常窗口样式应该是:

WS_POPUP | WS_VISIBLE

可以使用 GetSystemMetrics 找到尺寸具有值 SM_CXSCREENSM_CYSCREEN

要设置颜色键,请使用 SetLayeredWindowAttributes :

SetLayeredWindowAttributes (hwnd, RGB (red, green, blue), 0, LWA_COLORKEY);

其中 redgreenblue 构成窗口的背景色,不应显示为实际颜色。这样你的背景就不会被绘制,给用户带来不明显的差异,但当任何东西被绘制时,它都会显示出来。

关于c++ - 设置像素函数 [C++],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873394/

相关文章:

c++ - 模板函数多态性

c++ - 生成各种版本的 Boost UUID(通用唯一 ID)

c++ - Win32 从 Window WndProc 获取发送事件的对象的 HWND

java - 如何从 PNG 文件中读取像素?

java - 什么是欧氏距离平方或距离平方和?

macos - 循环遍历所有像素并在 OpenGL 中获取/设置单个像素颜色?

c++ - 从双向链表中删除节点并释放其空间

c++ - 追求更好的位标志枚举

android - 如何获取缩放后的图片宽度

image - 在 python 中使用 PIL 模糊图像