C#隐藏调整大小光标

6
在我的程序中,我使用WndProc覆盖来阻止窗体调整大小。问题是,当您将指针移动到窗体边缘时,光标仍然存在。
有没有办法隐藏这个光标?

3
我还没有测试过这个,所以只是评论一下,你试过拦截WM_NCHITTEST消息吗?更多信息在这里:http://msdn.microsoft.com/en-us/library/ms645618(VS.85).aspx - Lasse V. Karlsen
3个回答

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;
    }
}

我将工具箱设置为可调整大小,因为在Vista中,您会得到一个漂亮的边框。使用固定的3D效果,您不会得到那个边框(我将controlBox设置为false并且没有标题)。 - Ozzy
假设您的意思是SizeableToolWindow,您尝试过FixedToolWindow吗? 对我来说看起来完全相同,只是不可调整大小。 - Jon Skeet
只有在设置为可调整大小时,当控制框为false且文本为空时,边框才会出现。 - Ozzy

7

我已经找到了一种使用WndProc的方法,感谢Lasse给我的链接。感谢您的回复Jon,但这并不完全是我想要的。对于那些想知道我是如何做到的人,我使用了以下方法:

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

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

        base.WndProc(ref m);
    }

我还没有进行全面的测试,所以不知道是否有副作用,但目前对我来说可以正常使用 :).

当你发布这条信息时,我正要回答类似的问题,很高兴你已经找到了答案。但是,在返回之后你不需要换行。 - rfgamaral

0

只需设置FormBorderStyle即可。你为什么要使用WndProc来做这件事呢?


因为在这种情况下,FormBorderStyle 是不够的。 - Ozzy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接