首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

继续问:在窗口上画矩形框为啥这么难。郁闷解决办法

2012-03-21 
继续问:在窗口上画矩形框为啥这么难。郁闷下面是代码,void__fastcallTForm1::FormCreate(TObject*Sender){B

继续问:在窗口上画矩形框为啥这么难。郁闷
下面是代码,
void   __fastcall   TForm1::FormCreate(TObject   *Sender)
{
Brush-> Style=bsClear;
}
//---------------------------------------------
void   __fastcall   TForm1::FormMouseDown(TObject   *Sender,   TMouseButton   Button,
            TShiftState   Shift,   int   X,   int   Y)
{
      if(Shift.Contains(ssLeft))
      bMouseDownFlag=true;
      pt.x   =   X;
      pt.y   =   Y   ;
}
//---------------------------------------------------
void   __fastcall   TForm1::FormMouseMove(TObject   *Sender,   TShiftState   Shift,
            int   X,   int   Y)
{
if(bMouseDownFlag)
{
this-> Refresh();
this-> Canvas-> MoveTo(pt.x,pt.y);
this-> Canvas-> LineTo(pt.x,Y);
this-> Canvas-> MoveTo(pt.x,Y);
this-> Canvas-> LineTo(X,Y);
this-> Canvas-> MoveTo(X,Y);
this-> Canvas-> LineTo(X,pt.y);
this-> Canvas-> MoveTo(X,pt.y);
this-> Canvas-> LineTo(pt.x,pt.y);
}
}
//---------------------------------------
void   __fastcall   TForm1::FormMouseUp(TObject   *Sender,   TMouseButton   Button,
            TShiftState   Shift,   int   X,   int   Y)
{
        if(bMouseDownFlag)
        {this-> Refresh();
        this-> Canvas-> Rectangle(pt.x,pt.y   ,X,Y);
        bMouseDownFlag=false;}
}
郁闷,现在的问题是如果去掉FormCreate中的代码   Brush-> Style=bsClear;那么完全可以实现在form上画矩形的功能,并且每次画新的矩形时之前一个先画的矩形都会擦除掉。
可是加上FormCreate中的代码   Brush-> Style=bsClear;后,问题就来了,首先   1。是在画矩形的过程中有很多重叠的痕迹,2。每次画新的矩形时之前一个先画的矩形不会擦除掉。
请问这是为什么呢?怎么解决。我想在加上FormCreate中的代码   Brush-> Style=bsClear   的前提下   在form中画矩形,并且克服上面2个问题,请大家帮忙啊
谢谢


[解决办法]
用pmXor画一次就擦除原来的,然后再画就可以了,而且直接用rectangle就行不用lineto几次
所以你的move最好改改
[解决办法]
Brush-> Style=bsClear
改为
Brush-> Style=bsBlod

热点排行