[VB.NET]点击窗体标题时出现的问题.

探讨多种方法解决Windows窗体应用程序中双击标题栏导致窗体大小变化的问题,包括调整窗体属性、重写WndProc方法及使用第三方控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VB.NET源码-156个实用实例哦…… <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
点击窗体标题时出现的问题.

不知道大家试过没有。一旦你双击窗体的标题栏时,窗体的大小将发生改变,如何制止这个情况的出现?
__________________________________________________________________________
隐藏标题栏。
__________________________________________________________________________
代码中加上
protected override void WndProc(ref Message m)
{
base.WndProc (ref m);
if(m.Msg == 0x84) //不让拖动标题栏
{
if ((IntPtr)2 == m.Result)
m.Result = (IntPtr)1;
}
if(m.Msg==0x00A3) //双击标题栏无反应
m.WParam=System.IntPtr.Zero;

}
__________________________________________________________________________
楼上的方法我试了下
没什么效果
__________________________________________________________________________
难道.Net 无法直接截获非客区消息?
__________________________________________________________________________
不清楚具体你想做成怎么样的,你的问题的话,我的理解就是把窗口的最大值跟最小值设定成固定值就行了啊。。随便怎么点都不会有变化。。呵呵。。
__________________________________________________________________________
呵呵,第一个想到的也是楼上的方法, 把maximumSize跟size设成一样的大小。
但是,这种方法还是响应了鼠标的双击。双击后form会跑到左上角~

gz
__________________________________________________________________________
其实我是屏蔽过这个消息的,但是,我用了一个第三方的控件来美化窗体界面后,这个消息就不能屏蔽了,苦。
__________________________________________________________________________
WM_NCLBUTTONDBLCLK //0x00A3
这个消息可以屏蔽么?
我试了下截获不到(VS2005)
我机器有问题?
__________________________________________________________________________
设置form的MaximizeBox=false不就行了吗
__________________________________________________________________________
把最大化的按钮设置为False就行了.

或者设置FormBorderStyle为不可以改变大小的,比如:
this.FormBorderStyle = FormBorderStyle.FixedDialog
__________________________________________________________________________
你们自己试一下吧, 设成之后, 双击窗体标题的中间,呵呵,
__________________________________________________________________________

设置form的MaximizeBox=false完全可以啊(.Net005中试验过了)。
但是仅仅设置this.FormBorderStyle = FormBorderStyle.FixedDialog好像不行耶
__________________________________________________________________________
1.设置 MaximizeBox = false;
2.
protected override void WndProc(ref Message m)
{
if (m.Msg == 0xA3)
return;
base.WndProc(ref m);
}
__________________________________________________________________________
是的,这个不是设置maxsize为false就可以做到的么,还有什么疑义么
__________________________________________________________________________
我知道为什么有些人说设置 MaximizeBox=false 就可以了。事实上应该说明的是,窗体在windowstate=Maximized的情况下,你双击窗体标题,你就会发现他跑回来了,如果你不处于Maximized状态,他就不会有变化。
为什么要讨论这个问题,那是因为很多情况下,作windows 应用程序,窗体的windowstate都是处于Maximized状态的,而如果有哪个用户用你的程序的时候,他双击了窗体标题,如果你的MaximizeBox=false的话,他就会现程序没法用了。我也作为,在窗体大小变化的事件中强制windowstate=maximized,那样的话,画面会一闪一闪的,非常不专业。如果在慢的机器上用的话,实在是太丑。
__________________________________________________________________________
"代码中加上
protected override void WndProc(ref Message m)
{

if(m.Msg == 0x84) //不让拖动标题栏
{
if ((IntPtr)2 == m.Result)
m.Result = (IntPtr)1;
}
if(m.Msg==0x00A3) //双击标题栏无反应
m.WParam=System.IntPtr.Zero;
base.WndProc (ref m);
} "

base.WndProc (ref m);是不是应该放在后面?????????????
__________________________________________________________________________
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg = &HA3 Then m.WParam = System.IntPtr.Zero
MyBase.WndProc(m)
End Sub
__________________________________________________________________________
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值