【发布时间】: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