gpt4 book ai didi

.net - 一个像素输出 - OnPaint - System::Drawing::Rectangle rectangle = this->ClientRectangle;

转载 作者:太空宇宙 更新时间:2023-11-04 12:20:42 29 4
gpt4 key购买 nike

在 OnPaint 方法中绘图时,我一直偏离 1 个像素。我不明白为什么。

不过,我不确定是不是我算不上!

我已经回到绘图板,在 1 个面板中使用 1 个标签,因为我确定我正确地计算了这些,我有大量的跟踪,并且我一次一个地检查语句,绝对检查一切。

我确实发现了一些与此无关的错误,因此显然值得为此做。

我发现以下代码确实向 ClientRectangle 写入单个像素边框:-

    System::Drawing::Rectangle rectangle = this->ClientRectangle;
rectangle.Inflate(-1,-1);
e->Graphics->DrawRectangle(blackPen, rectangle);

到目前为止还不错,但为什么是 -1?

无论如何,当我单步执行代码时,我的困惑加深了。

除了这 1 个像素的边框外,我用以下内容填充了矩形的全部内容(通过反复试验和颜色编码找到了 2 个!):-

    System::Drawing::Pen^ violetPen = gcnew System::Drawing::Pen( Brushes::Violet );
for(int y=2; y< e->ClipRectangle.Bottom-1; y++)
{
e->Graphics->DrawLine( violetPen, e->ClipRectangle.Left+2, y,
this->ClientRectangle.Right-2, y);
}

因此,ClientRectangle 是可写区域,但对它的索引从 (1,1) 开始。
现在这是一个没有边框的面板,根据 MSDN a ClientRectangle如下:-

控件的客户区是控件的边界,减去滚动条、边框、标题栏和菜单等非客户元素。由于客户坐标是相对于控件客户区的左上角,因此该属性返回的矩形的左上角坐标为(0,0)。您可以使用此属性获取控件客户区的大小和坐标,以执行在控件表面上绘制等任务。

现在我的控件没有滚动条、边框、标题栏和菜单,所以我认为索引应该从 (0,0) 开始,这是我一直在计数的地方。

和一个Panel

Panel 控件默认无边框显示。

有人可以帮我理解我在这里缺少什么吗?

最佳答案

嗯,您确定问题点实际上是左上角,而不是右下角吗?

RECT structure Windows 控件内部使用的是独占,这意味着坐标为(右,下) 的像素紧靠在矩形之外。

如您所示,将对应于客户区的矩形缩小 1 个像素可解决此问题。

关于.net - 一个像素输出 - OnPaint - System::Drawing::Rectangle rectangle = this->ClientRectangle;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5280838/

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