2009-05-30 154 views
5

在我的程序中,即時通訊使用WndProc覆蓋來停止調整表單的大小。事情是,當您將指針移動到窗體邊緣時,光標仍然存在。有反正隱藏這個光標嗎?C#隱藏調整大小光標

+3

我沒有測試過這一點,所以我只是評論,你嘗試過攔截WM_NCHITTEST消息?更多信息在這裏:http://msdn.microsoft.com/en-us/library/ms645618(VS.85).aspx – 2009-05-30 18:36:16

回答

7

我發現使用的WndProc多虧了拉塞·鏈接發給我的方式。感謝您的回覆喬恩,但它不完全是我想要的。對於那些誰想要知道我是怎麼做的,我用這個:

protected override void WndProc(ref Message m) 
    { 
     const int WM_NCHITTEST = 0x0084; 

     switch (m.Msg) 
     { 
      case WM_NCHITTEST: 
       return; 
     } 

     base.WndProc(ref m); 
    } 

我沒有測試它徹底所以不知道是否有任何的副作用,但它工作正常,我的那一刻:)。

8

爲什麼不恰當地設置FormBorderStyle屬性?那麼你也不需要使用WndProc

下面是一些示例代碼來演示 - 點擊按鈕切換形式是否可以調整:

using System; 
using System.Windows.Forms; 
using System.Drawing; 

class Test 
{ 
    [STAThread] 
    static void Main(string[] args) 
    { 
     Button button = new Button 
     { 
      Text = "Toggle border", 
      AutoSize = true, 
      Location = new Point(20, 20) 
     }; 
     Form form = new Form 
     { 
      Size = new Size (200, 200), 
      Controls = { button }, 
      FormBorderStyle = FormBorderStyle.Fixed3D 
     }; 
     button.Click += ToggleBorder; 
     Application.Run(form); 
    } 

    static void ToggleBorder(object sender, EventArgs e) 
    { 
     Form form = ((Control)sender).FindForm(); 
     form.FormBorderStyle = form.FormBorderStyle == FormBorderStyle.Fixed3D 
      ? FormBorderStyle.Sizable : FormBorderStyle.Fixed3D; 
    } 
} 
+0

我有它設置爲可調整大小的工具箱,因爲在Vista中,你得到它周圍的好邊框。使用固定的3d,你不會得到那個邊框(我把controlBox設置爲false,沒有標題) – Ozzy 2009-05-30 18:51:08

+0

假設你的意思是SizeableToolWindow,你試過FixedToolWindow嗎?它看起來和我完全一樣,只是不能調整大小。 – 2009-05-30 19:10:18

+0

Downvoters:請解釋,所以答案可以改進。 – 2009-05-30 19:22:31

0

只需設置FormBorderStyle就足夠了。你爲什麼使用WndProc?

0

@Ozzy/Lasse 爲我工作!

有同樣的問題:

標準邊框樣式不給我想要的外觀,定製的CreateParams做。我爲Size,MinimumSize和MaximumSize指定了相同的值來禁用調整大小。調整大小光標仍然被設置雖然,謝謝奧茲&拉塞這現在是通過過濾處理WM_NCHITTEST ...

感謝