winform程序最小化到托盘后不能正常关机的解决方案
- 时间:2015年04月02日 15:26:17 来源:魔法猪系统重装大师官网 人气:4422
问题描述:
在最近的windows程序中,由于实现了winform程序点击窗口的关闭按钮,不直接退出程序,而是将程序最小化到托盘中,这样当程序没有退出之前,直接关机会导致关机不能正常进行。
问题原因:
操作系统会在用户点击关机后,发送一个关闭的消息到当前运行的应用程序,这个消息的ID号问0x11,这样当应用程序接受到消息后就会关闭自身,然后操作系统就可正常关闭了。但是我们在实现了上面的功能后,会在FormClosing事件中添加一段代码,
e.Cancel = true;
//最小化到托盘
NormalToMinimized();
这样我们虽然实现了功能,但是在接受到操作系统发送来的关闭窗口的消息的时候,就不能关闭程序了。
解决方案:
1.在应用程序的主窗口添加一个私有的标识,用来标识,关闭窗口的事件是由用户点击引起的还是由操作系统发送的小心引起的。
2.在应用程序主窗口中添加对系统消息的处理,这个处理的过程需要重写窗口的窗口过程,也就是窗口处理操作系统消息的方法。
protected override void WndProc(ref Message m) { if (m.Msg == 0x11) { //自定义的事件触发标识,为true时表示窗口的关闭事件是由操作系统的关机操作引起的。 isExitAppFalg = true; } base.WndProc(ref m); }
3.修改FormClosing事件的处理过程,添加一个判断就可以了
if (!isExitAppFalg) { e.Cancel = true; //最小化到托盘 NormalToMinimized(); }
这样就把实现功能所带了的副作用给解决了。
上一篇:jquery如何实现全选、不选或反选源码实例
下一篇:excel表格制作教程