C#WinForm如何用Setcursor改变鼠标形状

zz005 2009-05-08 02:57:01
你好,孟兄~!

MouseMove下想改变鼠标的形状,除了指定cursor=Hand之外,
如何用Setcursor事件来改变鼠标的形状呢?(不是指定读取cur文件的),
先谢谢孟兄了^_^。
...全文
2403 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yulien 2009-05-08
  • 打赏
  • 举报
回复
ding
hellen_cap 2009-05-08
  • 打赏
  • 举报
回复
up
zz005 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 net_lover 的回复:]
可以使用下面的方法自定义光标

C# codeprivatevoidButton1_Click(System.Object sender, System.EventArgs e)
{
OpenFileDialog fd=newOpenFileDialog();
fd.Filter="图像文件(*.jpg;*.gif;*.png)|*.jpg;*.gif;*.png";if(fd.ShowDialog()==Windows.Forms.DialogResult.OK) {
Image fn=Image.FromFile(fd.FileName);
Bitmap bitmap=newBitmap(fn);
IntPtr handle=bitmap.GetHicon();

[/Quote]

谢谢孟兄,

但我想用发送消息的办法实现:也不知道改如何表达更详细的,
查找了以前的帖子,看好像能用发送消息的办法实现,自己就搞不懂如何实现。

响应消息WM_SETCURSOR消息吧,在里面使用SetCursor

重载类的WM_NCHITTEST,改变鼠标  
在父窗口的WM_MOUSEMOVE和WM_PAINT里向子窗口发送WM_NCHITTEST消息

在WM_SETCURSOR消息中设置鼠标  

BOOL CAboutDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default

POINT point;
GetCursorPos(&point); //取得当前鼠标位置
//假设资源中这个图标的ID是IDC_IMAGE
CWnd *pCtrl = this->GetDlgItem(IDC_IMAGE);
RECT rect;
pCtrl->GetWindowRect(&rect); //取得控件矩形坐标

if( point.x >= rect.left && point.x <= rect.right &&
point.y >= rect.top && point.y <= rect.bottom)
{
//m_hCurNoDrop是在构造函数中用LoadCursor装入
SetCursor(m_hCurNoDrop);
return true;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}


孟子E章 2009-05-08
  • 打赏
  • 举报
回复
可以使用下面的方法自定义光标


private void Button1_Click(System.Object sender, System.EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
fd.Filter = "图像文件(*.jpg;*.gif;*.png)|*.jpg;*.gif;*.png";
if (fd.ShowDialog() == Windows.Forms.DialogResult.OK) {
Image fn = Image.FromFile(fd.FileName);
Bitmap bitmap = new Bitmap(fn);
IntPtr handle = bitmap.GetHicon();
Cursor myCursor = new Cursor(handle);
this.Cursor = myCursor;
}
}
孟子E章 2009-05-08
  • 打赏
  • 举报
回复

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fd As OpenFileDialog = New OpenFileDialog()
fd.Filter = "图像文件(*.jpg;*.gif;*.png)|*.jpg;*.gif;*.png"
If fd.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim fn As Image = Image.FromFile(fd.FileName)
Dim bitmap As New Bitmap(fn)
Dim handle As IntPtr = bitmap.GetHicon()
Dim myCursor As New Cursor(handle)
Me.Cursor = myCursor
End If
End Sub




拷贝直接执行看效果

冰凝瞬间1986 2009-05-08
  • 打赏
  • 举报
回复
友情客串下
zgke 2009-05-08
  • 打赏
  • 举报
回复
没明白什么意思..
wartim 2009-05-08
  • 打赏
  • 举报
回复
找到 vista 那个光标文件*.cur,然后new(filename) 给 cursor
zz005 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zgke 的回复:]
引用 12 楼 zz005 的回复:
引用 11 楼 blestcc 的回复:
我不明白同樣的效果用不同方法實現有差別嗎?為什么就不要this.Cursor = Cursors.Hand;呢?


兄台,不一样的。

如果用this.Cursor = Cursors.Hand;

那么在vasta下鼠标光标就不是vasta下的光标,

而是VS默认的Hand光标。


看到这个才知道你要什么..
[/Quote]

没办法啊,兄台,小弟薄弱,实在不能以最清晰的方式给表达出来。
zgke 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zz005 的回复:]
引用 11 楼 blestcc 的回复:
我不明白同樣的效果用不同方法實現有差別嗎?為什么就不要this.Cursor = Cursors.Hand;呢?


兄台,不一样的。

如果用this.Cursor = Cursors.Hand;

那么在vasta下鼠标光标就不是vasta下的光标,

而是VS默认的Hand光标。
[/Quote]

看到这个才知道你要什么..
qiqundelang 2009-05-08
  • 打赏
  • 举报
回复
看到老2了
兴奋
zz005 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 blestcc 的回复:]
我不明白同樣的效果用不同方法實現有差別嗎?為什么就不要this.Cursor = Cursors.Hand;呢?
[/Quote]

兄台,不一样的。

如果用this.Cursor = Cursors.Hand;

那么在vasta下鼠标光标就不是vasta下的光标,

而是VS默认的Hand光标。
光宇广贞 2009-05-08
  • 打赏
  • 举报
回复
应该不可以吧……不读取CUR文件,也得很把CUR文件读进内存或者本地二进制流才可以……
blestcc 2009-05-08
  • 打赏
  • 举报
回复
我不明白同樣的效果用不同方法實現有差別嗎?為什么就不要this.Cursor = Cursors.Hand;呢?
zz005 2009-05-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wartim 的回复:]
没看懂
C# codethis.Cursor=Cursors.UpArrow;//默认光标this.Cursor=newCursor(@"c:\1.ico");//自定义
[/Quote]

晕!描述得不好
wartim 2009-05-08
  • 打赏
  • 举报
回复
没看懂
this.Cursor = Cursors.UpArrow; // 默认光标 
this.Cursor = new Cursor(@"c:\1.ico"); // 自定义

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧