游标电流与此游标

游标电流与此游标,第1张

游标电流与此游标

Windows向包含鼠标光标的窗口发送WM_SETCURSOR消息,使其有机会更改光标形状。诸如TextBox之类的控件利用了这一点,将光标更改为I型栏。Control.Cursor属性确定将使用哪种形状。

Cursor.Current属性直接更改形状,而无需等待WM_SETCURSOR响应。在大多数情况下,这种形状不太可能长期生存。用户一旦移动鼠标,WM_SETCURSOR就会将其更改回Control.Cursor。

在.NET
2.0中添加了UseWaitCursor属性,以使其更易于显示沙漏。不幸的是,它不能很好地工作。它需要WM_SETCURSOR消息来更改形状,并且将属性设置为true并花一些时间才能完成。请尝试以下代码,例如:

private void button1_Click(object sender, EventArgs e) {  this.UseWaitCursor = true;  System.Threading.Thread.Sleep(3000);  this.UseWaitCursor = false;}

光标永远不会改变。要将其变形,您还需要使用Cursor.Current。这是一个简单的帮助程序类:

using System;using System.Windows.Forms;public class HourGlass : IDisposable {  public HourGlass() {    Enabled = true;  }  public void Dispose() {    Enabled = false;  }  public static bool Enabled {    get { return Application.UseWaitCursor; }    set {      if (value == Application.UseWaitCursor) return;      Application.UseWaitCursor = value;      Form f = Form.ActiveForm;      if (f != null && f.Handle != IntPtr.Zero)   // Send WM_SETCURSOR        SendMessage(f.Handle, 0x20, f.Handle, (IntPtr)1);    }  }  [System.Runtime.InteropServices.Dllimport("user32.dll")]  private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);}

并像这样使用它:

private void button1_Click(object sender, EventArgs e) {  using (new HourGlass()) {    System.Threading.Thread.Sleep(3000);  }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5462562.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存