在使用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)开始 现在这是一个没有边框的Panel,根据MSDN,ClientRectangle如下: -
控件的客户端区域是控件的边界,减去非客户端元素,如滚动条,边框,标题栏和菜单。 因为客户端坐标是相对于控件的客户区域的左上角,所以此属性返回的矩形左上角的坐标是(0,0)。您可以使用此属性来获取控件的客户区域的大小和坐标,以便在控件的表面上绘制任务。
现在我的控件没有滚动条,边框,标题栏和菜单,所以我认为索引应该从(0,0)开始,这是我一直在计算的地方。
默认情况下会显示Panel控件,没有任何边框。
有人可以帮我理解我在这里缺少的东西吗?
答案 0 :(得分:1)
嗯,你确定问题点实际上是左上角角落,而不是右下角吗?
Windows控件内部使用的RECT
structure是独占,这意味着坐标(右,底)的像素位于矩形的外部。
如您所示,将与客户区对应的矩形缩小1个像素,解决了这个问题。