查了网上的说法,貌似很多人说是用
Cursor.Current = Cursors.WaitCursor,可以实现将鼠标指针替换为等待模式。
但是我自己写了段代码:
private void btnTest_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
}
执行后看不到效果,鼠标还是老样子。
但是这样的代码则是有效的:
private void btnTest_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
}
但是这个效果仅限鼠标在窗体内部,一旦鼠标移到到窗体外面,又变回了原来的样子。
我需要将全局的鼠标都修改为我指定的图标,直到我另外一个按钮事件激发,再将鼠标图标改回来。
类似于VC中以下代码的效果
HICON hicon1 = LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE (IDI_ICON1));
//IDI_ICON1是有靶图标资源号
this->SetIcon(hicon1);
请教如何实现?
Cursor.Current = Cursors.WaitCursor,可以实现将鼠标指针替换为等待模式。
但是我自己写了段代码:
private void btnTest_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
}
执行后看不到效果,鼠标还是老样子。
但是这样的代码则是有效的:
private void btnTest_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
}
但是这个效果仅限鼠标在窗体内部,一旦鼠标移到到窗体外面,又变回了原来的样子。
我需要将全局的鼠标都修改为我指定的图标,直到我另外一个按钮事件激发,再将鼠标图标改回来。
类似于VC中以下代码的效果
HICON hicon1 = LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE (IDI_ICON1));
//IDI_ICON1是有靶图标资源号
this->SetIcon(hicon1);
请教如何实现?
这个代码在C#里能用么?C#中唯一一个SetValue函数是fieldInfo.SetValue,貌似和我现在的情况没什么关系。
WindowAPI中也没找到SetValue这个函数。
感觉应该有。
以前用过键盘监听。应该类似吧。
SetSystemCursor
介绍:函数功能:该函数使一个应用程序定制系统光标。它用hcur规定的光标内容代替id定义的系统光标内容,接着销毁hour。 函数原型:BOOL SetSystemCursor(HCURSOR hour,DWORD id); 参数: hcur:光标的句柄,该函数hcur标识的光标的内容代替id定义的系统光标内容。系统通过调用DestroyCursor函数销毁hour。因此hour不能是由LoadCursor函数载入的光标。要指定一个从资源载入的光标,先用CopyCursor函数复制该光标,然后把该副本传送给SetSystemCursor函数。 Id:指定由hour的内容替换系统光标。 下面是一系列的系统光标标识符: OCR_APPSTARTING:标准箭头和小的沙漏;OCR_NORAAC:标准箭头 OCR_CROSS:交叉十字线光标:OCR_HAND:手的形状(WindowsNT5.0和以后版本) OCR_HELP:箭头和向东标记;OCR_IBEAM:I形梁;OCR_NO:斜的圆 OCR_SIZEALL:四个方位的箭头分别指向北、南、东、西 OCR_SIZENESEW:双箭头分别指向东北和西南;OCR_SIZENS:双箭头,分别指向北和南 OCR_SIZENWSE:双箭头分别指向西北和东南;OCR_SIZEWE:双箭头分别指向西和东 OCR_UP:垂直箭头:OCR_WAIT:沙漏返回值:如果成功,返回非零值;如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。
下班后,回家试试这个API,虽然我不喜欢C#中调用C++的东西,不过看样子没办法了,要实现效果只能这样了吧。
鼠标的图像是windows保存,并负责实时更新的,所以你想要按照变成方法控制,光程序内部是困难滴
移动到窗体外 就变回来了。。public void SetCursor(Bitmap cursor, Point hotPoint)
{
int hotX = hotPoint.X;
int hotY = hotPoint.Y;
Bitmap myNewCursor = new Bitmap(cursor.Width * 2 - hotX, cursor.Height * 2 - hotY);
Graphics g = Graphics.FromImage(myNewCursor);
g.Clear(Color.FromArgb(0, 0, 0, 0));
g.DrawImage(cursor, cursor.Width - hotX, cursor.Height - hotY, cursor.Width, cursor.Height);
this.Cursor = new Cursor(myNewCursor.GetHicon());
g.Dispose();
myNewCursor.Dispose();
}
以下是我的测试代码:
[DllImport("user32.dll")]
public static extern int SetSystemCursor(int hcur, int id); public const int OCR_NORMAL = 32512; //表示正常状态下的鼠标 private void btnSetCursor_Click(object sender, EventArgs e)
{
Cursor MyCur = new Cursor(@"D:\eye.cur");
SetSystemCursor((int)MyCur.Handle, OCR_NORMAL); }
鼠标已经成功的切换为eye.cur了,但是悲剧发生了,我的鼠标改不回来了!!!!!!
所以大家还是别试这段代码了,省得和我一样悲剧。
饿,好吧,我承认我很搓。