为啥在纵向显示器设置上出现鼠标光标伪影?

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 如何判断鼠标光标在某个矩形框内,如果在,显示一个子窗口

苹果笔记本丢失鼠标指针

为啥在记事本窗口中输入时鼠标光标会消失,但在浏览器或 cmd 中没有?哪些 Win API 函数显示它以及如何显示它?

secureCRT如何设置鼠标点到哪光标就跟到哪