Я продолжаю быть на 1 пиксель при рисовании в методе OnPaint. Я не понимаю почему.
Однако я не уверен, что это я не могу рассчитывать!
Я вернулся к чертежной доске с 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), откуда я и рассчитывал.
и Панель
Панель управления по умолчанию отображается без каких-либо границ.
Может кто-нибудь помочь мне понять, что мне здесь не хватает?