0

每次移动鼠标光标时,我都有一个要加载的代码;它画线到鼠标的方向和超越,每次线到达某个x坐标时,线就会反射。问题是现在程序只在我单击 PaintBox 时画线。到目前为止,这是我的代码:

void __fastcall TForm2::PaintBox1Click(TObject *Sender)
{
   Form2->Refresh();
   TPoint P;
   ::GetCursorPos( &P );
   P = ScreenToClient( P );
   int XX;
   int YY;
   if (P.x<240) 
   {
      XX=15;
      YY= ((445-P.y)*(XX-P.x)/(240-P.x)+P.y);
   } 
   else if(P.x==240)
   {
      XX=240;YY=-5; 
   }
   else
   { 
      XX=465;
      YY= ((445-P.y)*(XX-P.x)/(240-P.x)+P.y);   
   }
   int delta=2*(445-YY);

   this->Canvas->MoveTo(240, 445);
   this->Canvas->LineTo(XX,YY);
   while(0<YY&&YY<480&&YY!=445)
   {
      XX=abs(480-XX);
      YY-=delta;
      this->Canvas->LineTo(XX,YY);
   }
}
4

1 回答 1

1

您正在尝试在OnClick事件处理程序中进行绘制。那是画错了地方。绘制到 VCL 绘制框的唯一正确位置是其OnPaint事件处理程序。

不过,您将需要做出回应OnClick。记下单击的位置并更新您需要维护的任何状态。然后调用Invalidate油漆盒强制油漆循环。

于 2014-03-22T08:50:36.850 回答