为啥在纵向显示器设置上出现鼠标光标伪影?
Posted
技术标签:
【中文标题】为啥在纵向显示器设置上出现鼠标光标伪影?【英文标题】:Why do i have mouse cursor artifacts on portrait monitor setup?为什么在纵向显示器设置上出现鼠标光标伪影? 【发布时间】:2015-01-10 16:43:12 【问题描述】:我有一个使用LoadImage(Hinstance, PWideChar(Name), IMAGE_CURSOR, 0, 0, LR_DEFAULTCOLOR);
加载自定义鼠标光标的delphi 应用程序。这些自定义光标的大小为 32x32、48x48 或 64x64,具体取决于用户的选择。如果我加载自定义光标并将鼠标移到应用程序之外,则光标将更改为 Windows 默认(箭头)之一。但是这个箭头现在在光标的底部有伪影。
此外,工件的变化取决于先前加载的自定义光标及其包含在其中的大小,例如64x64 矩形。
我试图截取屏幕截图,但工件上没有出现。所以我画了这个现象,让你知道它的样子。
到目前为止我发现了什么。必须应用以下列表中的所有点:
仅当自定义鼠标光标大于 32x32 时才会发生。 它只发生在纵向模式的显示器设置上。 仅当鼠标阴影处于活动状态时才会发生。 只有在鼠标轨迹关闭时才会发生这种情况。 只有在拥有 NVIDIA 显卡时才会发生这种情况。 仅当 DPI 设置为 100% 时才会发生。以下代码示例显示了光标的问题。只需新建一个VCL Form工程,添加到对应的单元即可。
unit Unit6;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
const
crMyCursor = 1;
type
TForm6 = class(TForm)
procedure FormShow(Sender: TObject);
end;
var
Form6: TForm6;
implementation
$R *.dfm
procedure TForm6.FormShow(Sender: TObject);
begin
Screen.Cursors[crMyCursor] := LoadImage(Hinstance, PWideChar('MAINICON'), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);
Screen.Cursor := crMyCursor;
end;
end.
更新: 它曾经是与 NVIDIA 显卡有关的问题。伪影出现在以下显卡中:GeForce 9600 GT、GeForce GT 630 和 GeForce GTX 660。我还测试了英特尔板载显卡和 ATI 显卡,但这些设置不会出现伪影。
那么谁能告诉我为什么会出现这些文物以及我如何摆脱它们?
【问题讨论】:
描述“人像模式”。您只是将显示器侧放。另外,这与 Delphi 相关还是所有应用的行为方式都相同? “肖像模式”是显示器的方向。您可以在 Windows 控制面板部分的“屏幕分辨率”中更改它。实际上,这不仅仅是一个 delphi 问题,因为我在其他应用程序中看到了这种现象,比如我用来创建资源文件以在 delphi 应用程序中使用光标的 XN 资源编辑器。 可能系统必须从使用内置在图形芯片/子系统中的硬件光标切换到使用软件光标。 没有delphi标签你可能会做得更好 另请参阅来自超级用户的not quite the same but similar resolutions 问题。 【参考方案1】:这是由于图形驱动程序和similar things occur for some ATI users 中的错误造成的。 但是,这不是 Delphi 甚至自定义鼠标问题。
我遇到了完全相同的现象(鼠标光标下出现奇怪的线条伪影),但只是在桌面上,在我的两侧,纵向翻转显示器(注意我运行的是 gtx680,所以你的列表不是'也不详尽)。
问题与阴影有关。 answers here 都可以工作,但显然如果您喜欢阴影当前的最佳答案(将显示器翻转回横向,然后在 Keep these settings?
提示符处恢复)会更适合您。
【讨论】:
【参考方案2】:实际上,我在重建后被重新引入了这个问题。我的解决方案是在鼠标属性的指针选项中启用“显示指针轨迹”,并将滑块一直设置为短。在那之后,就没有更多的文物了。
Mouse Properties
我几乎看不到鼠标痕迹,它的残影帮助我在三个显示器上跟踪它。
【讨论】:
以上是关于为啥在纵向显示器设置上出现鼠标光标伪影?的主要内容,如果未能解决你的问题,请参考以下文章
vc 如何判断鼠标光标在某个矩形框内,如果在,显示一个子窗口