【问题标题】:Draw new line every time mouse is moved in c++ builder每次在c ++ builder中移动鼠标时绘制新线
【发布时间】:2014-03-21 22:17:21
【问题描述】:

我想在每次移动鼠标光标时加载一个代码;它画线到鼠标的方向和超越,每次线到达某个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);
   }
}

【问题讨论】:

  • 您不能在 OnClick 处理程序中绘图。在 OnPaint 处理程序中绘制。你需要记住一些状态。使用 Invalidate 触发绘制周期。
  • 如何更改处理程序?当我尝试更改时,它会给出错误,它不是 TForm2 的成员
  • 更改什么处理程序?不要模糊地描述错误。逐字引用。
  • 我将 void __fastcall TForm2::PaintBox1Click(TObject *Sender) 更改为 void __fastcall TForm2::PaintBox1Paint(TObject *Sender) 并给出错误:[BCC32 Error] Unit2.cpp(22): E2316 '_fastcall TForm2::PaintBox1Paint(TObject *)' is not a member of 'TForm2'
  • 谢谢!这肯定解决了我的问题,现在我对 c++ builder 的理解要好得多!

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


【解决方案1】:

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

不过,您需要回复 OnClick。记下单击的位置并更新您需要维护的任何状态。然后在油漆盒上调用Invalidate 以强制进行油漆循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 2021-05-29
    • 2018-11-03
    • 2013-12-26
    • 2017-07-04
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多