在窗体上画图的问题。菜鸟恳请各位解答!!!(100分)

  • 主题发起人 主题发起人 my.c
  • 开始时间 开始时间
M

my.c

Unregistered / Unconfirmed
GUEST, unregistred user!
我想当鼠标在窗体上左击时,在窗体上画图。代码段如下:
void TForm1::DrawChessmanX(int x,int y)
{
Canvas->Pen->Width=2;
Canvas->Pen->Style=psSolid;
Canvas->Pen->Color=clBlack;
Canvas->MoveTo(x,y);
Canvas->LineTo(x+30,y+30);
Canvas->MoveTo(x+30,y);
Canvas->LineTo(x,y+30);
}
void TForm1::DrawChessmanO(int x, int y)
{
Canvas->Pen->Width=2;
Canvas->Pen->Style=psSolid;
Canvas->Pen->Color=clBlue;
Canvas->Brush->Color=Form1->Color;
Canvas->Ellipse(x,y,x+30,y+30);

}
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{int x,y;
if(Button==mbLeft)
for(x=20;x<=20+30*18;x=x+30)
{if(X>x&amp;&amp;X<x+30)
for(y=20;y<=20+30*18;y=y+30)
{if(Y>y&amp;&amp;Y<y+30)
{if(steps%2==1)
DrawChessmanX(x,y);
if(steps%2==0)
DrawChessmanO(x,y);}}
}
steps=steps+1;
}
鼠标左击时,图是画出来了,可当窗体刷新时,图就没了。怎样才能使窗体刷新后图保持原样?
还有,这是我第一次用bcb,c语言也是正在学习中,代码写得很烂,麻烦大家批评指正。不胜感激!!!
 
跟delphi一样不行码?
把你的onmousedown代码改改放在onpaint事件里
 
在窗体上放一个Image控件,设置Align属性为alClient,把FormMouseDown的代码
改写在Image1MouseDown中,把Canvas改为Image1->Canvas或Image1->Picture->
Bitmap->Canvas,画完图时要Image1->Refresh。应该OK了,可能有点闪。
另外最好在Form1Resize时加入:
Image1->Picture->Bitmap->Width=ClientWidth;
Image1->Picture->Bitmap->Height=ClientHeight;
 
在窗体的onpaint事件中也要自行该代码一边
 
窗体需要重画的时候发送的是wm_paint消息呀,
需要更新的图像放到wm_paint (或者onpaint)里实现,或者重复
 
http://www.delphibbs.com/delphibbs/dispq.asp?LID=1105212
100块大洋等你
 
在bcb中如何动态创建,添加component?例如动态创建,添加image。
 
Timage *tmp=new Timage(this);
tmp->width=xxx;
tmp->height=xxx;
tmp->parent=xxxxxxxxx;//父容器
 
同意book523,
我原来在Image上画曲线就是在窗体的onpaint事件中重画一次,
效果很好的。
但你的情况复杂点,可能要加全局变量记下原来鼠标的位置,再重画。
 
up to shangshang
 
还是用Image控件吧,简单易行
 
时间太久,强制结束。
 
后退
顶部