相关疑难解决方法(0)

自由调整大小句柄无边框C#

我正在尝试制作从工具栏中弹出的无边框表单.我希望用户能够抓住右下角("调整大小句柄")并能够调整表单大小,但无法以任何其他方式调整表单大小或重新定位.

我听说我可以拦截WM_NCHITTEST发送到表单的消息,并设置其结果HTBOTTOMRIGHT,让操作系统处理重新调整表单的大小,就像它有一个相当大的框架一样.我的想法是检测鼠标指针是否已进入我在角落中定义的框,如果它已经,则返回HTBOTTOMRIGHT结果.

图示说明调整大小手柄

这并不像我预期的那样有效.我能够拦截消息,但似乎只有当用户将鼠标光标放在窗体的1px粗边框上时才会发送消息.这意味着它可以按照我想要的方式工作,如果你将光标精确地放在右下角的边缘上.

这是我的WndProc覆盖:

protected override void WndProc(ref Message m)
{
    const UInt32 WM_NCHITTEST = 0x0084;
    const UInt32 HTBOTTOMRIGHT = 17;
    const int RESIZE_HANDLE_SIZE = 40;
    bool handled = false;
    if (m.Msg == WM_NCHITTEST)
    {
        Size formSize = this.Size;
        Point screenPoint = new Point(m.LParam.ToInt32());
        Point clientPoint = this.PointToClient(screenPoint);
        Rectangle hitBox = new Rectangle(formSize.Width - RESIZE_HANDLE_SIZE, formSize.Height - RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE, RESIZE_HANDLE_SIZE);
        if (hitBox.Contains(clientPoint))
        {
            m.Result = (IntPtr)HTBOTTOMRIGHT;
            handled = true;
        }
    }

    if …
Run Code Online (Sandbox Code Playgroud)

c# winapi winforms window-resize

16
推荐指数
1
解决办法
1万
查看次数

调整右下角的无边框窗口大小

我希望用户在右下角调整无边框窗口的大小,就像我可以调整组合框控件的自动完成窗口一样.

我无法找到以这种方式配置表单的属性.

也许有人可以帮我解决这个问题.

可以在这里找到一张图片:

在此输入图像描述

c# winforms

15
推荐指数
3
解决办法
2万
查看次数

通过鼠标拖动无边框窗口

可能重复:
C# - 使无边框形式可移动?

我通过设置在C#中创建了一个没有边框的表单

this.FormBorderStyle = FormBorderStyle.None;

现在,问题是如何用鼠标拖动它?

c# drag winforms

6
推荐指数
1
解决办法
2万
查看次数

删除标题栏,同时保留边框

我想创建一个没有标题栏的表单,同时保留边框,这样我仍然可以调整大小并捕捉它。设置FormBorderStyleNone可以,但它会破坏边界。

在 Google 搜索了一下后,我多次遇到一种方法,也在这里:设置ControlBoxFalse以及Text空字符串似乎在旧版本的 Windows 上有效,在 Windows 10 上,但它看起来像这样:

标题栏的其余部分很丑

请注意顶部丑陋的栏,我想将其删除。我发现的所有其他解决方案 - 例如覆盖 WndProc - 要么根本不起作用,要么也删除了边框。

编辑:白色栏位于非客户区域,它是删除窗口按钮和标题文本后标题栏剩下的内容。

.net c# winforms

5
推荐指数
1
解决办法
1131
查看次数

如何使无边框表单可在自定义标题栏上拖动?

我使用 c# 创建了一个无边框表单,但可以使自定义标题栏可移动,因此我搜索互联网并找到了以下代码:

protected override void WndProc(ref Message m)
{ 
    base.WndProc(ref m);
    if (m.Msg == WM_NCHITTEST)
       m.Result = (IntPtr)(HT_CAPTION);
}

private const int WM_NCHITTEST = 0x84;
private const int HT_CLIENT = 0x1;
private const int HT_CAPTION = 0x2;
Run Code Online (Sandbox Code Playgroud)

应用此代码后,可以在除标题栏之外的表单的每一英寸中单击并拖动我的表单。

c# windows-forms-designer borderless

3
推荐指数
1
解决办法
1万
查看次数

如何从所有边缘调整无边框表单的大小

我在 C# 中有无边框的简单 win 表单。现在我想在表单状态为 时使用鼠标调整表单大小WindowState = FormWindowState.Normal。调整大小行为应该与带边框的正常形式相同。

我用了this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

附上表格图片供参考。

在此输入图像描述

请建议我执行此任务的最佳方法。要求具有无边框形式。因为表单 UI 应该像平面 UI 一样。

c#

1
推荐指数
1
解决办法
2810
查看次数