设置像素函数 [C++]
SetPixel function [C++]
为什么当我调用 SetPixel 函数在 iTunes 中设置像素时,它确实向我显示了该特定应用程序中的像素(就像它应该的那样),而在为 Windows Media Player 调用相同的函数时,它根本不显示。此外,此功能似乎也不适用于全屏窗口。为什么会有这么大的多样性?任何解释将不胜感激。提前谢谢。
如前所述,很容易得不到您期望的结果,因为它不是您的窗口,您最终无法控制它的作用!
你可以做的两件事(一件显然比另一件事好)是:
-
使用
GetDC (NULL)
获取屏幕设备上下文的句柄。使用ClientToScreen
计算像素在屏幕上的位置。使用该句柄调用SetPixel
。不过,这将很快被清除。 -
使用适当的颜色键创建您自己的顶级、弹出窗口、透明(对消息)分层窗口。使用
ClientToScreen
计算屏幕的位置,并可能ScreenToClient
以确保它正确进入窗口(理论上应该与屏幕具有相同的客户端尺寸)。将像素绘制到窗口上,您将控制它何时离开。
如果使用第二个,则扩展窗口样式应为:
WS_EX_TOPMOST | WS_EX_TRANSPARENT | WS_EX_LAYERED
您的正常窗口样式应为:
WS_POPUP | WS_VISIBLE
可以使用带有值 SM_CXSCREEN
和 SM_CYSCREEN
的 GetSystemMetrics
找到尺寸。
要设置颜色键,请使用SetLayeredWindowAttributes
:
SetLayeredWindowAttributes (hwnd, RGB (red, green, blue), 0, LWA_COLORKEY);
其中red
、green
和blue
构成窗口的背景颜色,并且不应显示为实际颜色。这样你的背景就不会被绘制出来,给用户一个不明显的差异,但是当绘制任何东西时,它就会出现。
应在控件的WM_PAINT处理程序中绘制控件。由于它不是您的控制,因此您无法直接访问消息循环。这意味着,如果控件无效,您的像素将消失。
经常播放视频或更新其内容的应用程序将使控件每帧无效。这会强制控件非常快速地更新。
我认为透明的覆盖窗口是这里唯一的方法。除非您可以挂接到消息循环并在控件处理完WM_PAINT处理程序后对它做出反应......
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗