在我的程序中,我使用WndProc覆盖来阻止我的表单调整大小。事实是,当您将指针移动到窗体的边缘时,光标仍然存在。反正有没有隐藏这个光标?
答案 0 :(得分: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;
}
}
答案 1 :(得分:7)
由于Lasse发给我的链接,我找到了使用WndProc的方法。谢谢你的答复Jon,但这不是我想要的。对于那些想知道我是怎么做的人,我用过这个:
protected override void WndProc(ref Message m)
{
const int WM_NCHITTEST = 0x0084;
switch (m.Msg)
{
case WM_NCHITTEST:
return;
}
base.WndProc(ref m);
}
我没有彻底测试过,所以不知道是否有任何副作用,但目前对我来说效果很好:)。
答案 2 :(得分:0)
只需设置FormBorderStyle即可。你为什么要使用WndProc?
答案 3 :(得分:0)
@Ozzy / Lasse 为我工作!
有同样的问题:
标准边框样式不提供我想要的外观,自定义CreateParams。我为Size,MinimumSize和MaximumSize指定了相同的值来禁用调整大小。由于Ozzy& amp;和调整大小的游标仍在设置中。 Lasse现在通过过滤WM_NCHITTEST ...
来处理由于