【发布时间】:2011-07-13 22:38:02
【问题描述】:
在 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,ClientRectangle 如下:-
控件的客户区是控件的边界,减去滚动条、边框、标题栏和菜单等非客户元素。 因为客户坐标是相对于控件客户区的左上角的,所以这个属性返回的矩形左上角的坐标是(0,0)。您可以使用该属性获取控件客户区的大小和坐标,用于在控件表面绘制等任务。
现在我的控件没有滚动条、边框、标题栏和菜单,所以我认为索引应该从 (0,0) 开始,这是我一直计数的地方。
还有一个Panel
面板控件默认显示为无边框。
有人可以帮我理解我在这里缺少什么吗?
【问题讨论】:
标签: .net c++ winforms visual-studio-2010