程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Windows API--光標的操作,windowsapi--光標

Windows API--光標的操作,windowsapi--光標

編輯:C#入門知識

Windows API--光標的操作,windowsapi--光標


獲取與設置光標在屏幕上的位置 

  GetCursorPos 獲取光標在屏幕上的位置,光標位置始終是在屏幕坐標縱指定的,並且不受包含光標的窗口映射模式的影響

    函數原型:

      BOOL GetCursorPos(LPPOINT lpPoint);

    參數說明:

      lpPoint:類型LPPOINT,輸出參數;一個指向光標在屏幕坐標點的結構指針

    返回值:

      BOOL類型,調用成功返回非0,失敗返回0;

  SetCursorPos 設置光標在屏幕上的位置,如果新的坐標不是由最新的ClipCursor函數調用設置的屏幕矩形中,系統自動調整坐標以便光標停留在該矩形內

    函數原型:

      BOOL SetCursorPos(int X,int Y);

    參數說明:

      X:類型int,輸入參數;設置光標在屏幕坐標中的x坐標

      Y:類型int,輸入參數;設置光標在屏幕坐標中的y坐標

    返回值:

       BOOL類型,調用成功返回非0,失敗返回0;

  C#代碼調用案例

    /// <summary>
    /// 光標的坐標
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public struct LPPOINT
    {
        public int X;
        public int Y;
    }
 1         //獲取光標位置
 2         [DllImport("user32.dll", EntryPoint = "GetCursorPos")]
 3         unsafe public static extern bool GetCursorPos(LPPOINT* lpPoint);
 4         //設置光標位置
 5         [DllImport("user32.dll", EntryPoint = "SetCursorPos")]
 6         public static extern bool SetCursorPos(int X, int Y);
 7 
 8         unsafe static void Main(string[] args)
 9         {
10             int x = 100, y = 100;
11             for (int i = 0; i < 200; i++)
12             {
13                 SetCursorPos(x + i, y + i);
14                 LPPOINT lpPoint;
15                 GetCursorPos(&lpPoint);
16                 Console.WriteLine("[x:{0},y:{1}]", lpPoint.X, lpPoint.Y);
17                 Thread.Sleep(50);
18             }
19             Console.ReadKey();
20         }

獲取當前光標句柄

  GetCursor 獲取當前光標的句柄

    函數原型:

       HCURSOR WINAPI GetCursor(void);

    參數說明:

      無參

    返回值:

       返回當前光標的句柄,如果沒有返回NULL

  C#代碼調用案例

1         [DllImport("user32.dll", EntryPoint = "GetCursor")]
2         public static extern IntPtr GetCursor();
3 
4         unsafe static void Main(string[] args)
5         {
6             Console.WriteLine(GetCursor());
7             Console.ReadKey();
8         }

獲取全局光標信息

  GetCursorInfo 獲取全局光標的信息

    函數原型:

      BOOL GetCursorInfo(PCURSORINFO pci);

    參數說明:

      pci:PCURSORINFO類型,輸入輸出參數;一個指向PCURSORINFO的結構體的指針,函數調用前必須設置參數結構體cSize成員的值為sizeof(CURSORINFO)

    返回值:

       BOOL類型,調用成功返回非0,失敗返回0;

  C#代碼調用案例

 1     public struct CURSORINFO
 2     {
 3         public int cbSize;//結構體的大小,可通過sizeof(CURSORINFO)獲取賦值
 4         public int flags; //值為0光標隱藏;值為0x00000001光標顯示;值為0x00000002禁用光標,該標志顯示系統未繪制光標,用戶通過觸控輸入而不是鼠標
 5         public IntPtr hCursor;//光標句柄
 6         public LPPOINT ptScreenPos;//光標在屏幕上的坐標
 7     }
 8 
 9     class Program
10     {
11         [DllImport("user32.dll", EntryPoint = "GetCursorInfo")]
12         unsafe public static extern bool GetCursorInfo(CURSORINFO* pci);
13 
14         unsafe static void Main(string[] args)
15         {
16             CURSORINFO pci;
17             pci.cbSize = sizeof(CURSORINFO);
18             GetCursorInfo(&pci);
19             Console.WriteLine("cbSize:{0},flags:{1},hCursor:{2},[X:{3},Y:{4}]",
20                 pci.cbSize, pci.flags, pci.hCursor, pci.ptScreenPos.X, pci.ptScreenPos.Y);
21             Console.ReadKey();
22         }
23     }

限定光標位置

  ClipCursor 將光標限定在舉行區域內

    函數原型:

      BOOL WINAPI ClipCursor(const RECT * lpRect);

    參數說明:

      lpRect:RECT類型,輸入參數;一個包含左上角和右下角的屏幕坐標結構指針,如果設置為NULL,則光標可以任意移動到屏幕上的任何位置

    返回值:

       BOOL類型,調用成功返回非0,失敗返回0;

  C#代碼調用案例

 1     public struct RECT
 2     {
 3         public int left;//矩形的左上角的x坐標
 4         public int top;//矩形的左上角的y坐標
 5         public int right;//矩形的右下角的x坐標
 6         public int bottom;//矩形的右下角坐標
 7     }
 8 
 9     class Program
10     {
11         [DllImport("user32.dll", EntryPoint = "ClipCursor")]
12         unsafe public static extern IntPtr ClipCursor(RECT* lpRect);
13 
14         unsafe static void Main(string[] args)
15         {
16             RECT rect;
17             rect.left = 100;
18             rect.top = 100;
19             rect.right = 200;
20             rect.bottom = 200;
21             ClipCursor(&rect);
22             Console.ReadKey();
23         }
24     }

Header---Winuser.h

Library---user32.dll

參考資源:https://msdn.microsoft.com/zh-cn/vstudio/ms646970%28v=vs.90%29

使用案例:https://msdn.microsoft.com/zh-cn/vstudio/ms648380%28v=vs.90%29#_win32_Creating_a_Cursor

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved