gpt4 book ai didi

c# - 用户如何在运行时在 winforms 中调整控件的大小

转载 作者:可可西里 更新时间:2023-11-01 08:14:58 25 4
gpt4 key购买 nike

假设我有一个 pictureBox。

现在我想要的是用户应该能够随意调整 pictureBox 的大小。但是我什至不知道如何开始这件事。我在互联网上搜索过,但信息很少。

至少有人可以指导我从哪里开始吗?

最佳答案

这很容易做到,Windows 中的每个窗口都具有可调整大小的先天能力。它只是为 PictureBox 关闭,您可以通过监听 WM_NCHITTEST message 将其重新打开。您只需告诉 Windows 光标位于窗口的一角,您就可以免费获得其他一切。您还需要绘制一个抓握 handle ,以便用户清楚地知道拖动角将调整框的大小。

向您的项目添加一个新类并粘贴如下所示的代码。构建+构建。您将在工具箱顶部获得一个新控件,将其放在窗体上。设置 Image 属性,您就可以尝试了。

using System;
using System.Drawing;
using System.Windows.Forms;

class SizeablePictureBox : PictureBox {
public SizeablePictureBox() {
this.ResizeRedraw = true;
}
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
var rc = new Rectangle(this.ClientSize.Width - grab, this.ClientSize.Height - grab, grab, grab);
ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc);
}
protected override void WndProc(ref Message m) {
base.WndProc(ref m);
if (m.Msg == 0x84) { // Trap WM_NCHITTEST
var pos = this.PointToClient(new Point(m.LParam.ToInt32()));
if (pos.X >= this.ClientSize.Width - grab && pos.Y >= this.ClientSize.Height - grab)
m.Result = new IntPtr(17); // HT_BOTTOMRIGHT
}
}
private const int grab = 16;
}

另一种免费调整大小的非常廉价方法是为控件提供可调整大小的边框。适用于所有角落和边缘。将此代码粘贴到类中(您不再需要 WndProc):

protected override CreateParams CreateParams {
get {
var cp = base.CreateParams;
cp.Style |= 0x840000; // Turn on WS_BORDER + WS_THICKFRAME
return cp;
}
}

关于c# - 用户如何在运行时在 winforms 中调整控件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17264225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com