2009-05-30 181 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 ...

感谢