【问题标题】:C# Hide Resize CursorC#隐藏调整大小光标
【发布时间】:2009-05-30 18:33:47
【问题描述】:

在我的程序中,我使用 WndProc 覆盖来阻止我的表单被调整大小。问题是,当您将指针移动到表单边缘时,光标仍然存在。

有什么办法可以隐藏这个光标吗?

【问题讨论】:

标签: c# user-interface mouse-cursor


【解决方案1】:

为什么不适当地设置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 并且没有标题)
  • 假设你的意思是SizeableToolWindow,你试过FixedToolWindow吗?它在我看来完全一样,只是不可调整大小。
  • 只有当它设置为可调整大小时,当控制框为假且文本为“”时,边框才会出现
【解决方案2】:

感谢 Lasse 发给我的链接,我找到了使用 WndProc 的方法。感谢您的回复乔恩,但这并不是我想要的。对于那些想知道我是如何做到的人,我使用了这个:

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

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

        base.WndProc(ref m);
    }

我还没有彻底测试过,所以不知道是否有任何副作用,但目前对我来说效果很好:)。

【讨论】:

  • 当您发布时,我正要回答类似的问题,很高兴您找到了答案。不过返回后你不需要休息。
【解决方案3】:

只需设置 FormBorderStyle 就足够了。你为什么要为此使用 WndProc?

【讨论】:

  • 因为在这种情况下 formborderstyle 是不够的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
  • 2014-03-17
  • 2018-04-16
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多