每次在c ++ builder中移动鼠标时绘制新行

时间:2014-03-21 22:17:22

标签: c++ drawing draw c++builder c++builder-2010

我每次移动鼠标光标时都会加载一段代码;它绘制线条到鼠标的方向和更远的方向,每当线条到达某个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);
   }
}

1 个答案:

答案 0 :(得分:1)

您正试图在OnClick事件处理程序中绘制。这是错误的绘画地点。绘制到VCL绘图框的唯一正确位置来自其OnPaint事件处理程序。

但您需要回复OnClick。记下点击的位置并更新您需要维护的任何状态。然后在绘图框上调用Invalidate以强制进行绘画循环。