好吧,正如标题所说,我如何设置图像或其他任何东西作为鼠标光标.我知道你可以使用属于Cursors类的内置类,但我想知道是否有办法使用你自己的图像(最好没有P/Invoke,但两种方式都可以.)
编辑:我想我没有清楚地解释我想要的东西.我没有任何.cur文件(它们是否易于创建?),我想知道是否有办法从磁盘(或任何地方)获取图像并将其用作光标.我想要的Ultimatley会做这样的事情:
myForm.Cursor = new Cursor(Image.FromFile("foo.jpg"));
Run Code Online (Sandbox Code Playgroud)
可能?
我希望能够在鼠标光标周围显示快速的动画“闪光”(类似于某些屏幕录制应用程序中的效果)。解决这个问题的好方法是什么?
我当前的想法是在鼠标位置下显示一个临时的、浮动的、透明的窗口窗口,为其设置动画,然后隐藏它。但我想知道是否有更好的建议?
有没有办法如何确定当前鼠标光标是否动画?
我正在寻找一种如何在前一段时间保存当前光标的方法.我发现DrawIconEx功能非常适合我的目的.不幸的是,我不知道如何确定当前光标是否已设置动画.我希望如果我在静态游标的情况下将istepIfAniCur参数设置为1,则DrawIconEx返回False,但它实际上忽略了该参数并返回True,不允许我在循环中使用它来获取静态游标以及来自的所有帧动画片.如果是动画,则按预期工作,因此当您使用istepIfAniCur超出范围时,它将返回False.
那我怎么知道HICON(HCURSOR)是动画光标呢?DrawIconEx如何确定光标是动画的?
非常感谢
我们基本上是在创建一个控制面板小程序。我们需要在鼠标属性中切换“增强指针精度”。
为此,我们需要SystemParametersInfo调用SPI_GETMOUSE. 它有一个包含 3 个元素的数组作为其第三个参数。我是 PInvoke 的新手,我尝试过很多签名,但到目前为止还没有成功。这是我为签名所做的尝试:
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, [MarshalAs(UnmanagedType.LPArray)] ref long[] vparam, SPIF fWinIni);
static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref long[] vparam, SPIF fWinIni);
Run Code Online (Sandbox Code Playgroud)
上述方法都不适合我,这是我遇到的异常::
System.AccessViolationException尝试读取或写入受保护的内存。这通常表明其他内存已损坏。
在搜索时我想出了这个用VB编写的。
解决方案:感谢GWLlosa 的回答,我想出了解决方案 :
[DllImport("user32.dll", EntryPoint = "SystemParametersInfo", SetLastError = true)]
public static extern bool SystemParametersInfoGet(uint action, uint param, IntPtr vparam, SPIF fWinIni);
public const UInt32 SPI_GETMOUSE = 0x0003;
[DllImport("user32.dll", …Run Code Online (Sandbox Code Playgroud) 可以旋转FrameworkElement.Cursor吗?
我的应用程序允许用户围绕其中心旋转对象.旋转后,默认调整大小的光标在倾斜边框上显得很笨拙.
我的第一个想法是应用于RotateTransformCursor属性,但看起来我们不能在XAML中这样做.接下来我尝试从Cursor类继承,但它看起来像MS家伙拥有sealed它.
另一种方法是将默认光标设置为None并使用我自己的图像(使用变换)并设置其位置MouseMove.如果有更容易的选择,我不愿意走这条路.谁有好的建议?
如果可能的话,我正在寻找一个仅支持WPF的解决方案.
我试图在鼠标悬停在元素上时动态更改光标样式。光标应该是“移动”或“默认”,具体取决于方法返回的布尔值。代码是这样的:
$("#elemId").mousemove(function(event) {
if(cursorShouldBeMove()) {
$(this).css({'cursor':'move'});
} else {
$(this).css({'cursor':'default'});
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码在 IE8、FF3、Chrome 和 Safari 中就像一个魅力。只有 Opera 未能正确处理它。
我使用的是 Opera 9.6.4
有谁知道如何解决这个问题?
我准备了样品进行测试;
var cursorStatus = true;
setInterval(function() { cursorStatus = !cursorStatus; }, 500);
function cursorShouldBeMove() {
return cursorStatus;
}
$(function() {
$("#elemId").mousemove(
function(event) {
$(this).css("cursor", cursorShouldBeMove() ? "move" : "default");
}
);
});
Run Code Online (Sandbox Code Playgroud)
如果将鼠标从 #elemId 外部移动到内部几次,您将看到光标会发生变化。但是,如果您将鼠标放置在 #elemId 中并移动鼠标,光标不会改变。
代码非常简单。我认为这是 Opera 的一个错误。
我还测试了这段代码;
(Windows 版本)
我有一个 System.Windows.Forms.Cursor ,想将其分配给 WPF 的 image.Cursor 属性,该属性恰好是 System.Windows.Input.Cursor 类型。这里的约束是,前一个 Cursor 类型是由我们的框架返回的,我无法修改它。有什么方法可以将前者转换为后者吗?
有没有办法使用 Xlib 检索当前光标位图?我已经检查过XCursor man,但我没有看到任何可以做到这一点的方法。
在处理 WM_SETCURSOR Windows 消息时,我对某个光标调用 SetCursor 。如果我将光标设置为与实际不同的内容,它会等到鼠标通过移动或单击获得输入来实际设置它。
有没有办法解决这个问题,以便在光标接受输入之前光标不会在视觉上看起来错误?
case WM_SETCURSOR:
{
SetCursor( game->GetCursor() ); // Returns m_curCurrent
return true;
}
break;
Run Code Online (Sandbox Code Playgroud)
当我想要改变光标类型时,我还设置了它。
游戏初始化期间:
m_curDefault = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_DEFAULT_CURSOR ));
m_curAttack = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_ATTACK_CURSOR ));
m_curMove = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_MOVE_CURSOR ));
m_curCurrent = m_curDefault;
Run Code Online (Sandbox Code Playgroud)
设置光标类型时
void Game::SetCursorType( CursorTypes curType )
{
switch ( curType )
{
case CGame::DefaultCursor:
m_curCurrent = m_curDefault;
break;
case CGame::AttackCursor:
m_curCurrent = m_curAttack;
break;
case CGame::MoveCursor:
m_curCurrent = m_curMove;
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将光标属性从 更改为:default仅将:se-resize鼠标悬停在框的边框上。有什么办法可以在 CSS 中做到这一点吗?我只需要CSS 中的选项!
HTML:
<textarea placeholder="..."></textarea>
Run Code Online (Sandbox Code Playgroud)
CSS:
textarea {
width: 510px;
height: 140px;
padding: 5px 0;
border:2px solid #dddddd;
outline-style:none;
color: #777777;
Run Code Online (Sandbox Code Playgroud)
}