每次移动鼠标光标时,我都想加载一个代码;它向鼠标方向及以后绘制线,每次线到达某个 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
事件处理程序中进行绘制。那是画错的地方。向 VCL 绘画框绘画的唯一正确位置是来自其 OnPaint
事件处理程序。
不过,您需要响应 OnClick
。记下点击的位置并更新您需要维护的任何状态。然后调用绘制框上的 Invalidate
以强制绘制循环。
关于c++ - 每次在 C++ 构建器中移动鼠标时绘制新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570515/