亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何自定義Winform應用程序的鼠標圖片

發布時間:2020-11-07 16:07:42 來源:億速云 閱讀:182 作者:Leah 欄目:開發技術

如何自定義Winform應用程序的鼠標圖片?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

首先,建立圖片與鼠標的對應關系。

class MouseStyle
{
  [DllImport("user32.dll")]
  public static extern IntPtr SetCursor(IntPtr cursorHandle);


  static MouseStyle()
  {
    InitMouseStyle();
  }

  private static void InitMouseStyle()
  {
    if (Hand == null)
    {
      Hand = SetCursor("Image//Hand.png");
    }
    if (Arrow == null)
    {
      Arrow = SetCursor("Image//Arrow.png");
    }
  }
  /// <summary>
  /// 鼠標手型樣式
  /// </summary>
  public static Cursor Hand = null;

  /// <summary>
  /// 鼠標指針樣式
  /// </summary>
  public static Cursor Arrow = null;

  /// <summary>
  /// 設置鼠標樣式
  /// </summary>
  /// <param name="fileName">自定義的鼠標樣式文件</param>
  /// <returns>鼠標樣式</returns>
  private static Cursor SetCursor(string fileName)
  {
    //文件的絕對路徑,在debug下
    var path = System.IO.Path.GetFullPath(fileName) ;

    //畫圖
    Bitmap bit = (Bitmap)Bitmap.FromFile(path, true);
    Bitmap myNewCursor = new Bitmap(bit.Width, bit.Height);
    Graphics g = Graphics.FromImage(myNewCursor);
    g.Clear(Color.FromArgb(0, 0, 0, 0));

    //箭頭和手型有點不一樣
    if (System.IO.Path.GetFileName(fileName).Equals("Hand.png"))
    {
      g.DrawImage(bit, bit.Width / 2 - 15, bit.Height / 2, bit.Width / 2, bit.Height / 2);
    }
    else
    {
      g.DrawImage(bit, bit.Width / 2 - 15, bit.Height / 2, bit.Width / 2, bit.Height / 2);
    }

    Cursor cursor;
    //獲取圖片的句柄
    try
    {
      cursor = new Cursor(myNewCursor.GetHicon());
    }
    catch
    {
      cursor = new Cursor(Icon.FromHandle(myNewCursor.GetHicon()).Handle);
    }

    //釋放資源
    g.Dispose();

    return cursor;
  }
}

  如果是鼠標文件.cur結尾,可以直接使用。

法1、在每一個窗體中單獨修改其中的鼠標外觀,這樣鼠標離開自己的程序后,也會恢復到系統默認的鼠標樣式。

  在上述類中,添加代碼:

/// <summary>
/// 設置鼠標樣式
/// </summary>
/// <param name="col">控件</param>
public static void SetMouseStyle(Control col)
{
  InitMouseStyle();

  //設置窗體鼠標為箭頭
  if (col is Form)
  {
    ((Form)col).Cursor = Arrow;
  }

  //遍歷控件,如果控件是箭頭或默認,就改為自定義的箭頭
  //如果是手型就改為自定義的手型
  foreach (Control con in col.Controls)
  {
    if (con.Cursor == Cursors.Hand)
    {
      con.Cursor = Hand;
    }
    if (con.Cursor == Cursors.Arrow || con.Cursor == Cursors.Default)
    {
      con.Cursor = Arrow;
    }

    //遞歸遍歷
    SetMouseStyle((Control)con);
  }
}

  然后在所有窗體中,均調用SetMouseStyle方法,傳入窗體自身

法2、修改系統鼠標,待程序退出時,還原系統鼠標。首先添加代碼,調用window的API:

[DllImport("User32.DLL")]
public static extern bool SetSystemCursor(IntPtr hcur, uint id);
public const uint OCR_NORMAL = 32512;
public const uint OCR_HAND = 32649;
public const uint OCR_IBEAM = 32513;
//速查 https://docs.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-setsystemcursor&#63;redirectedfrom=MSDN
//OCR_APPSTARTING:標準箭頭和小的沙漏;32650
//OCR_NORMAL:標準箭頭 32512
//OCR_CROSS:交叉十字線光標: 32515
//OCR_HAND:手的形狀(WindowsNT5.0和以后版本) 32649
//OCR_HELP:箭頭和向東標記; 32651
//OCR_IBEAM:I形梁; 32513
//OCR_NO:斜的圓 32648
//OCR_SIZEALL:四個方位的箭頭分別指向北、南、東、西 32646
//OCR_SIZENESEW:雙箭頭分別指向東北和西南; 32643
//OCR_SIZENS:雙箭頭,分別指向北和南 32645
//OCR_SIZENWSE:雙箭頭分別指向西北和東南; 32642
//OCR_SIZEWE:雙箭頭分別指向西和東 32644
//OCR_UP:垂直箭頭: 32516
//OCR_WAIT:32514 沙漏返回值:如果成功,返回非零值;如果失敗,返回值為零。

[DllImport("User32.DLL")]
public static extern bool SystemParametersInfo(uint uiAction, uint uiParam,
 IntPtr pvParam, uint fWinIni);
public const uint SPI_SETCURSORS = 87;
public const uint SPIF_SENDWININICHANGE = 2;

  程序啟動和退出時分別調用設置方法和恢復方法:

private void button1_Click(object sender, EventArgs e)
{
  //設置
  SetSystemCursor(Cursors.WaitCursor.CopyHandle(), OCR_NORMAL);
  SetSystemCursor(Cursors.WaitCursor.CopyHandle(), OCR_IBEAM);
  //..可以根據情況加
}

private void button2_Click(object sender, EventArgs e)
{
  //恢復
  SystemParametersInfo(SPI_SETCURSORS, 0, IntPtr.Zero, SPIF_SENDWININICHANGE);
}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长兴县| 广饶县| 元朗区| 临武县| 涟源市| 浦县| 安徽省| 宁乡县| 利辛县| 通州区| 平利县| 许昌县| 尚志市| 鹤庆县| 随州市| 太仆寺旗| 陆丰市| 黑山县| 且末县| 广州市| 延川县| 呼伦贝尔市| 康乐县| 巨鹿县| 依兰县| 开化县| 柏乡县| 秦皇岛市| 黔西| 赤峰市| 轮台县| 大化| 武鸣县| 固始县| 长子县| 武山县| 巴塘县| 柘荣县| 东乡族自治县| 高雄市| 阳谷县|