小程序监听关闭按钮实例及开发说明
小程序开发的每一个步骤都是有难度的,刚刚接触到小程序的开发者面对小程序监听关闭按钮的设置就头疼不已,小编为大家带来了关于小程序监听关闭按钮的具体资料,包括实例讲解、设计过程以及小程序开发技术的说明,希望能够对大家有所帮助。
小程序监听关闭按钮实例说明:
一般情况下,在窗体的右上角都有最大化、最小化和关闭按钮,丹在MDI窗体中,有事为了避免重复打开同一个小程序窗口,需要禁用窗口上面的“关闭”按钮,本实例就实现了这样的功能。
说道禁用、有的人会说:直接在FormClosing处理不就得了:
1 ///
2 /// 窗体关闭时的事件
3 ///
4 private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
5 {
6 e.Cancel = true; // 取消关闭操作
7 }
当然,这样可以,但是我们的目标是实现如下图所示的禁用+变灰:
运行效果如图所示:
很神奇吧、我们知道最大化最小化按钮时可以禁用的、但是关闭按钮怎么禁用呢?请看下面的制作过程:
小程序监听关闭按钮关键技术:
本实例主要用到了窗口处理方法WndProc的重写方法,在该方法的内部截获单击关闭窗口的消息,从而实现禁用“关闭”按钮的功能。
使用GetSystemMenu()和EnableMenuItem()使“关闭”按钮变灰色、
其它事件的使用等等。
WndProc方法主要用来处理Windows消息,语法格式如下:
1 [SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
2 [SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
3 protected virtual void WndProc(ref Message m);
[注:详细的函数说明请参见源码中的备注说明。]
小程序监听关闭按钮的设计:
(1)打开Visual Studio,新建WinForm应用程序,将其命名为StopCloseButton。
(2)定义以下成员变量及API声明:
1 private const int SC_CLOSE = 0xF060; //定义关闭按钮对应的消息值
2 private const int MF_ENABLED = 0x00000000; //禁用
3 private const int MF_GRAYED = 0x00000001; //变灰
4 private const int MF_DISABLED = 0x00000002; //禁用
5 private const int WM_SYSCOMMAND = 0x0112; // 定义要截获的消息类型
6
7 [DllImport("user32.dll", EntryPoint = "GetSystemMenu")]
8 private static extern IntPtr GetSystemMenu(IntPtr hWnd, int bRevert);
9
10 [DllImport("User32.dll")]
11 public static extern bool EnableMenuItem(IntPtr hMenu, int uIDEnableItem, int uEnable);
(2)重写WndProc方法、实现当用户点击“关闭”按钮时无反应的效果:
1 ///
2 /// 重写WndProc方法、实现当用户点击“关闭”按钮时无反应的效果
3 ///
4 /// 要处理的Windows消息
5 protected override void WndProc(ref Message m)
6 {
7 if ((m.Msg == WM_SYSCOMMAND) && (int)m.WParam == SC_CLOSE) // 当鼠标单击“关闭”按钮时
8 {
9 return; // 不进行任何处理 直接返回
10 }
11 base.WndProc(ref m); // 传递下一条消息
12 }
(3)先别急着运行、因为那样除了结束进程是关不掉的、
所以、给自己留一条后路:放一个按钮、用于退出、在按钮的Click事件中写上退出程序的方法:
1 private void button1_Click(object sender, EventArgs e)
2 {
3 Application.Exit();
4 }
(4)运行后发现,确实“关闭”按钮不能点击了、但是、他也没有变灰色啊、
那是因为我们还没有调用EnableMenuItem()呢:
在窗体的构造或Load事件中调用GetSystemMenu()和EnableMenuItem()函数以达到变灰“关闭”按钮的效果:
1 private void FrmMain_Load(object sender, EventArgs e)
2 {
3 IntPtr hMenu = GetSystemMenu(this.Handle, 0); //得到关闭按钮
4 EnableMenuItem(hMenu, SC_CLOSE, (MF_DISABLED + MF_GRAYED) | MF_ENABLED); //设置样式(参数可自定义)
5 }
(5)到此,这个小程序就已经实现完毕了,细心的人会发现以下的小Bug:
虽然“关闭”按钮已经禁用了、但是、当你点击以下最大化后、虽然关闭按钮依旧不能用、但是灰色效果消失了、
那么解决的方案就是禁用掉最大化最小化按钮、(*^_^*)、
或者在窗体状态改变的事件里面再次调用以下变灰的小程序函数即可。
小编在文中介绍了小程序监听关闭按钮的开发实例,包括实现小程序监听关闭按钮所需要的关键技术以及整个的设计过程,相信大家有了微信小程序商店提供的如此详细的资料,想要设置小程序监听关闭按钮应该易如反掌了吧,那就赶紧操作起来吧!
微信小程序数据监听如何实现?
小程序监听音乐播放停止如何实现?
小程序监听页面滚动如何实现?
上一篇:微信小程序重置表单的方法