加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

无边框和可调整大小的表单(C#)

发布时间:2020-12-14 22:33:22 所属栏目:资源 来源:网络整理
导读:我在网上发现了一些代码并将其复制了,到目前为止,我已经能够把一切都弄好了,除了一件事我想让窗体(窗口)完全没有边框. 我正在使用Visual Studio 2013,这个问题只是关于使窗体(窗口)无边界所需的代码.问题是,当你使它无边界时,它不再可调整大小,但是当它有边
我在网上发现了一些代码并将其复制了,到目前为止,我已经能够把一切都弄好了,除了一件事我想让窗体(窗口)完全没有边框.

我正在使用Visual Studio 2013,这个问题只是关于使窗体(窗口)无边界所需的代码.问题是,当你使它无边界时,它不再可调整大小,但是当它有边框时,它可以调整大小.

我知道使用一些代码可以覆盖并实现两者.这是我到目前为止(从其他网站复制).这摆脱了具有程序名称的顶部栏,通过单击并拖动表单使表单可移动,并且它可以调整大小.

唯一的问题是边界仍然存在.我可以添加什么代码,这样边框就会消失?我想保留当前的代码,因为它提供了我需要的几个功能.

顺便说一句,我查看了一些类似主题的旧问题,但没有找到我需要的正确代码.

对于指导我到另一个线程的mod:我在那里尝试了代码,虽然这是一个类似的问题,但这并不是我想要实现的.当我尝试该代码时,我无法单击窗体(窗口)上的任何位置来移动它.另外,它右下角有一个可调整大小的角落,这不是我想要的.我需要在所有角落和侧面调整大小,就像普通窗口一样.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BoxHider
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //Next line doesn't seem to be working
            this.FormBorderStyle = FormBorderStyle.None;
        }
        const int WM_NCHITTEST = 0x0084;
        const int HTCLIENT = 1;
        const int HTCAPTION = 2;
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            switch (m.Msg)
            {
                case WM_NCHITTEST:
                    if (m.Result == (IntPtr)HTCLIENT)
                    {
                        m.Result = (IntPtr)HTCAPTION;
                    }
                    break;
            }
        }
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.Style |= 0x40000;
                return cp;
            }
        }               
    }
}

解决方法

试试这个:
public Form1()
{
    InitializeComponent();
    this.FormBorderStyle = FormBorderStyle.None;
}

protected override void WndProc(ref Message m)
{
    const int RESIZE_HANDLE_SIZE = 10;

    switch (m.Msg)
    {
        case 0x0084/*NCHITTEST*/ :
            base.WndProc(ref m);

            if ((int)m.Result == 0x01/*HTCLIENT*/)
            {
                Point screenPoint = new Point(m.LParam.ToInt32());
                Point clientPoint = this.PointToClient(screenPoint);                        
                if (clientPoint.Y <= RESIZE_HANDLE_SIZE)
                {
                    if (clientPoint.X <= RESIZE_HANDLE_SIZE)
                        m.Result = (IntPtr) 13/*HTTOPLEFT*/ ;
                    else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE))
                        m.Result = (IntPtr) 12/*HTTOP*/ ;
                    else
                        m.Result = (IntPtr) 14/*HTTOPRIGHT*/ ;
                }
                else if (clientPoint.Y <= (Size.Height - RESIZE_HANDLE_SIZE))
                {
                    if (clientPoint.X <= RESIZE_HANDLE_SIZE)
                        m.Result = (IntPtr) 10/*HTLEFT*/ ;
                    else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE))
                        m.Result = (IntPtr) 2/*HTCAPTION*/ ;
                    else
                        m.Result = (IntPtr) 11/*HTRIGHT*/ ;
                }
                else
                {
                    if (clientPoint.X <= RESIZE_HANDLE_SIZE)
                        m.Result = (IntPtr) 16/*HTBOTTOMLEFT*/ ;
                    else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE))
                        m.Result = (IntPtr) 15/*HTBOTTOM*/ ;
                    else
                        m.Result = (IntPtr)17/*HTBOTTOMRIGHT*/ ;
                }
            }
            return;
    }
    base.WndProc(ref m);
}

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.Style |= 0x20000; // <--- use 0x20000
        return cp;
    }
}

信息来源:

> https://stackoverflow.com/a/19670447/2352507
> Custom Resize Handle in Border-less Form C#
> http://www.csharp411.com/add-drop-shadow-to-borderless-form/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读