首先,建立图片与鼠标的对应关系。
class moustyle{ [dllimport("ur32.dll")] public static extern intptr tcursor(intptr cursorhandle); static moustyle() { initmoustyle(); } private static void initmoustyle() { if (hand == null) { hand = tcursor("image//hand.png"); } if (arrow == null) { arrow = tcursor("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 tcursor(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.i林伟贤o.path.getfilename(filename).equals("hand.png")) { g.drawimage(bit, bit.width / 2 - 15, bit.height / 2, bit.width / 2, bit.height / 2); } el { 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.dispo(); return cursor; }}
如果是鼠标文件.cur结尾,可以直接使用。
法1、在每一个窗体中单独修改其中的鼠标外观,这样鼠标离开自己的程序后,也会恢复到系统默认的鼠标样式。
在上述类中,添加代码:
/// <summary>/// 设置鼠标样式/// </summary>/// <param name="col">控件</param>public static void tmoustyle(control 做鬼脸表示什么col){ initmoustyle(); //设置窗体鼠标为箭头 if (col is form) { ((form)col).cursor = arrow; } //遍历控件,如果控件是箭头或默认,就改为自定义的箭头 //如果是手型就改为自定义的手型金兵是哪个民族 foreach (control con in col.controls) { if (con.cursor == cursors.hand) { cos60度等于多少啊 con.cursor = hand; } if (con.cursor == cursors.arrow || con.cursor == cursors.default) { con.cursor = arrow; } //递归遍历 tmoustyle((control)con); }}
然后在所有窗体中,均调用tmoustyle方法,传入窗体自身
法2、修改系统鼠标,待程序退出时,还原系统鼠标。首先添加代码,调用window的api:
[dllimport("ur32.dll")]public static extern bool tsystemcursor(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/winur/nf-winur-tsystemcursor?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_sizenew:双箭头分别指向东北和西南; 32643//ocr_sizens:双箭头,分别指向北和南 32645//ocr_sizenw:双箭头分别指向西北和东南; 32642//ocr_sizewe:双箭头分别指向西和东 32644//ocr_up:垂直箭头: 32516//ocr_wait:32514 沙漏返回值:如果成功,返回非零值;如果失败,返回值为零。[dllimport("ur32.dll")]public static extern bool systemparametersinfo(uint uiaction, uint uiparam, intptr pvparam, uint fwinini);public const uint spi_tcursors = 87;public const uint spif_n刑事代理dwininichange = 2;
程序启动和退出时分别调用设置方法和恢复方法:
private void button1_click(object nder, eventargs e){ //设置 tsystemcursor(cursors.waitcursor.copyhandle(), ocr_normal); tsystemcursor(cursors.waitcursor.copyhandle(), ocr_ibeam); //..可以根据情况加}private void button2_click(object nder, eventargs e){ //恢复 systemparametersinfo(spi_tcursors, 0, intptr.zero, spif_ndwininichange);}
以上就是winform应用程序如何使用自定义的鼠标图片的详细内容,更多关于winform 自定义鼠标图片的资料请关注www.887551.com其它相关文章!
本文发布于:2023-04-04 07:22:14,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8d206bdacd4409058300b476f8e47a86.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Winform应用程序如何使用自定义的鼠标图片.doc
本文 PDF 下载地址:Winform应用程序如何使用自定义的鼠标图片.pdf
留言与评论(共有 0 条评论) |