
<script type="text/javascript"> </script> <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
__________________________________________________________________________