利用Windows消息循环,使窗体不能改变大小
2006-04-07 19:06
316 查看
作者:Christoph Herold
这篇文章介绍如何使窗体仅能被最大化,最小化!
介绍
你是否曾经用.NET 创建一个窗体,使窗体仅能被最大化、最小化?使用标准可用的选项实现是十分困难的.但是使用Windows消息循环,很容易使禁止Window标准特性.这篇文章将展示给你,用消息循环实现事实上是多么的简单.
重载窗体的WndProc方法
当一个窗体被最大化、最小化或者还原成窗体原始大小和位置时,Windows消息循环发送适当的命令给窗体. .NET窗体类会捕获所以的这些消息给你。在这个例子中,我们重载标准处理来忽略还原命令。这个被重载的窗体方法是WndProc.
protected override void WndProc(ref Message m)
protected override void WndProc(ref Message m)
假如窗体不是最小化的,这是最基本的代码。当你重新恢复最小化窗体,也就是"restored"。因为我们忽略了这个消息,我们将再也不能看到我们的窗体再次出现。因此我们必须扩展我们的方法,来检查当前的Window状态。假如窗体状态是最小化的,或者也不是最大化时,我们最大化我们的Window,而不是恢复它。
下面就是我们最后的执行代码:
protected override void WndProc(ref Message m)
在这个方法里的这两个Windows API常量(WM_SYSCOMMAND = 0x0112, SC_RESTORE = 0xF120)在Platform SDK 文件Winuser.h中可以找到
总结
当你理解了Windows 消息循环,修改窗体的默认特性是十分容易的。有益于我们看到.NET框架下的细节,有益于去创建简单的程序,也有益于我们编程。
原地址:
http://www.codeproject.com/useritems/DisableNormalWindowState.asp
这篇文章介绍如何使窗体仅能被最大化,最小化!
介绍
你是否曾经用.NET 创建一个窗体,使窗体仅能被最大化、最小化?使用标准可用的选项实现是十分困难的.但是使用Windows消息循环,很容易使禁止Window标准特性.这篇文章将展示给你,用消息循环实现事实上是多么的简单.
重载窗体的WndProc方法
当一个窗体被最大化、最小化或者还原成窗体原始大小和位置时,Windows消息循环发送适当的命令给窗体. .NET窗体类会捕获所以的这些消息给你。在这个例子中,我们重载标准处理来忽略还原命令。这个被重载的窗体方法是WndProc.
protected override void WndProc(ref Message m)
protected override void WndProc(ref Message m)
假如窗体不是最小化的,这是最基本的代码。当你重新恢复最小化窗体,也就是"restored"。因为我们忽略了这个消息,我们将再也不能看到我们的窗体再次出现。因此我们必须扩展我们的方法,来检查当前的Window状态。假如窗体状态是最小化的,或者也不是最大化时,我们最大化我们的Window,而不是恢复它。
下面就是我们最后的执行代码:
protected override void WndProc(ref Message m)
在这个方法里的这两个Windows API常量(WM_SYSCOMMAND = 0x0112, SC_RESTORE = 0xF120)在Platform SDK 文件Winuser.h中可以找到
总结
当你理解了Windows 消息循环,修改窗体的默认特性是十分容易的。有益于我们看到.NET框架下的细节,有益于去创建简单的程序,也有益于我们编程。
原地址:
http://www.codeproject.com/useritems/DisableNormalWindowState.asp
相关文章推荐
- c#利用消息给无边框窗体改变大小
- 如何实现能像windows 窗体一样改变大小的控件 Silverlight
- 打飞机游戏的基本框架:固定窗体位置,不能随意改变窗体大小
- 不能改变大小的窗体
- 利用WINDOWS的消息机制进行截断视频的循环显示
- 利用窗体width动态改变窗体大小
- 利用Windows消息循环实现消息延迟和消息合并
- DirectUI中模态对话框和菜单的原理(自己控制整个Windows消息循环。或者,用菜单模拟窗体打开时用SetCapture取得控制权,一旦窗体收到WM_CAPTURECHANGED消息就把窗体退出)
- 如何设置C#窗体大小不能改变
- C#的WinForm中如何让窗体大小不能改变
- 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了
- 让窗体从初始时就保持最大化,并且不能改变窗体大小的完美解决方案
- MapXtrem + Asp.net 地图随窗体改变大小
- C#中怎么使控件随着窗体的大小改变而改变
- IOS - xib(Interface Builder,view) - can't change view size(view不能改变大小问题)
- 让控件随窗体大小改变而改变
- textarea 不能改变大小的方法
- c# winform 利用 windows media player 循环播放视频
- Qt事件机制浅析(定义,产生,异步事件循环,转发,与信号的区别。感觉QT事件与Delphi的事件一致,而信号则与Windows消息一致)
- 在.Net的WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变