C# 使用picturebox控件移动无边框窗体

C# 使用picturebox控件移动无边框窗体,c#,forms,picturebox,C#,Forms,Picturebox,我有一个没有边界的winform。我向它添加了一个picturebox控件,并将其设置为停靠在父容器中。我想做两件事,当我点击picturebox中的任意位置时,我希望能够将整个表单拖动到屏幕上的任意位置,并希望能够通过拖动botton右角来调整表单的大小 如果我有表格的话,我可以做上面的事情,但是由于图片盒填满了整个表格,我不知道怎么做 使表单工作的代码: private const int WM_NCHITTEST = 0x84; private const int HTCL

我有一个没有边界的winform。我向它添加了一个picturebox控件,并将其设置为停靠在父容器中。我想做两件事,当我点击picturebox中的任意位置时,我希望能够将整个表单拖动到屏幕上的任意位置,并希望能够通过拖动botton右角来调整表单的大小

如果我有表格的话,我可以做上面的事情,但是由于图片盒填满了整个表格,我不知道怎么做

使表单工作的代码:

    private const int WM_NCHITTEST = 0x84;
    private const int HTCLIENT = 0x1;
    private const int HTCAPTION = 0x2;


    protected override void WndProc(ref Message message)
    {
        base.WndProc(ref message);

        if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT)
        {
            message.Result = (IntPtr)HTCAPTION;

            int x = (int)(message.LParam.ToInt64() & 0xFFFF);
            int y = (int)((message.LParam.ToInt64() & 0xFFFF0000) >> 16);
            Point pt = PointToClient(new Point(x, y));
            Size clientSize = ClientSize;
            if (pt.X >= clientSize.Width - 16 && pt.Y >= clientSize.Height - 16 && clientSize.Height >= 16)
            {
                message.Result = (IntPtr)(IsMirrored ? htBottomLeft : htBottomRight);
                return;
            }

        }


   }

你试过自己处理这份工作吗?是的。如果我只是让表单工作,那么当我添加picturebox时它就不工作了。我想你可能需要做的是覆盖picturebox并处理picturebox的nchittest(也可能是hittest?)编辑:我现在没有一个例子说明如何做到这一点,但是如果你看一下picturebox层次结构,你会发现它处理Too,只是不使用图片框。如果要显示图像,请使用窗体的BackgroundImage属性。