c#設定滑鼠無法使用和啟用滑鼠
阿新 • • 發佈:2019-02-03
class Program
{
[StructLayout(LayoutKind.Sequential)]
public struct tagRECT
{
/// LONG->int
public int left;
/// LONG->int
public int top;
/// LONG->int
public int right;
/// LONG->int
public int bottom;
}
/// Return Type: BOOL->int
///lpRect: RECT*
[DllImport("user32.dll", EntryPoint = "ClipCursor")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool ClipCursor([In] IntPtr lpRect);
/// <summary>
/// 應用程式的主入口點。
/// </summary>
[STAThread]
static void Main()
{
tagRECT rect = new tagRECT() { left = 0, top = 0, right = 1, bottom = 1 };
var p = Marshal.AllocHGlobal(Marshal.SizeOf(rect));
Marshal.StructureToPtr(rect, p, false);
ClipCursor(p);//鎖定
ClipCursor(IntPtr.Zero);//解鎖
}
}
//如果需要,還可以隱藏指標
呼叫滑鼠對用的介面,設定disable即可,啟用則為enable
怎樣利用多執行緒控制代碼設定滑鼠忙碌狀態呢?當我們在讀取資料的時候,或者處理大量資料的時候可能需要把滑鼠設定為忙碌狀態,等待返回結果。下面的程式碼可以幫忙實現這點:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace CursorThread
{
public partial class Form1 : Form
{
public delegate int DoSomethingDelegate(int data);
public Form1()
{
InitializeComponent();
}
static int DoSomething(int data)
{
/// <sumary>
/// Do something in this method
/// </sumary>
Thread.Sleep(300);
return data++;
}
private void button1_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.Default;
DoSomethingDelegate d = DoSomething;
IAsyncResult ar = d.BeginInvoke(100,null, null);
while (true)
{
this.Cursor = Cursors.WaitCursor;
if(ar.AsyncWaitHandle.WaitOne(50, false))
{
this.Cursor = Cursors.Arrow;
break;
}
}
//Get the result
int result = d.EndInvoke(ar);
MessageBox.Show(result.ToString());
}
}
}
這樣在點選滑鼠後,滑鼠會變成忙碌狀態一直等待DoSomething這個方法呼叫結束,然後變回箭頭狀態。
當然你也可以這樣:
// Set the status of the cursor
this.Cursor = Cursor.Busy;
// Do Something
// Set the status of the cursor
this.Cursor = Cursor.Arrow;
--如果是在方法裡面呼叫的話,不能使用this關鍵字,那你可以這樣做:
private void Method()
{
Curosor.Current = Cursor.WaitCursor;
/// Do Something
Cursor.Current = Cursor.Arrow;
}
--在c#程式中,當程式執行某功能時,可以將滑鼠設定成忙碌狀態。
private void Ddocilck_Click(object sender, EventArgs e)
{
this.Cursor = System.Windows.Forms.Cursors.WaitCursor;//滑鼠為忙碌狀態
/*
**執行程式碼**
*/
this.Cursor = System.Windows.Forms.Cursors.Arrow;//設定滑鼠為正常狀態
}
/**
使用C#改變滑鼠的指標形狀
1.在一個無標題的窗體中用MOUSEMOVE事件判斷滑鼠座標是否到達窗體的邊緣,如果是的話將滑鼠指標改為可調整窗體大小的雙向箭頭.
**/
private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(0 == e.X)
{
this.Cursor = Cursors.SizeWE;
}
//改成這樣就可以了,很奇怪(不能寫成:e.X >= this.Width)
else if(e.X >= this.Width-2)
{
this.Cursor = Cursors.SizeWE;
}
else
{
this.Cursor = Cursors.Default;
}
}
/**
2.但c#.net提供的cursor類只能做windows提供的游標形狀之間的變換,cursor類貌似不支援動畫以及多色的檔案。我想要用自己的點陣圖檔案作為游標,應該怎麼弄呢?
方案:使用滑鼠檔案定義自己的滑鼠指標。
Cursor.Current=new Cursor(@"C:\my.cur");
OR: Cursor Cur=new Cursor(@"C:\my.cur");
this.Cursor = Cur;
在窗體的建構函式里加入上面的程式碼,就可以改變滑鼠指標形狀。
my.cur是滑鼠點陣圖檔案,將滑鼠圖片直接作為檔案加入到工程內,在工程內選擇新增的檔案後察看屬性,修改生成屬性值為嵌入的資源,這樣就可以編譯到exe裡面取了。
**/