窗体的最大化、最小化、还原
winform窗体在无边框和标题栏的情况下,实现最大化会将任务栏遮挡,防止这种情况也很简单:
- 只需在窗体初始化的时候加上下面短短的代码即可
WindowState
属性控制窗体的形态
窗体最大化及还原:
最小化同理
重写窗体,使窗体可以不通过自带标题栏实现移动
- 首先必须了解Windows的消息传递机制,当有鼠标活动消息时,
- 系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。 nchittest
- 假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION ,
- 同样地,若接受到的消息是 HTCLIENT,说明用户点击的是客户区,也就是鼠标消息发生在客户区。
- 当重载窗体的 WndProc 方法时,可以截获 WM_NCHITTEST 消息并改些该消息,
- 当判断鼠标事件发生在客户区时,改写改消息,发送 HTCAPTION 给窗体,
- 这样,窗体收到的消息就时 HTCAPTION ,在客户区通过鼠标来拖动窗体就如同通过标题栏来拖动一样。
注意:当你重载 WndProc 并改写鼠标事件后,整个窗体的鼠标事件也就随之改变了
panel容器控件移动窗口
- 利用控件的鼠标按下和离开两个事件即可
- 原理便是重绘
关闭窗体的几种实现和利弊
- 1.
this.Close();
只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出 - 2.
Application.Exit();
强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出 - 3.
Application.ExitThread();
强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题 - 4.
System.Environment.Exit(0);
这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净