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

C++builder在paintbox中绘图有关问题

2012-03-15 
C++builder在paintbox中绘图问题1,设置Canvas都为paintbox1-Canvas,但是代码YuanXing()却会绘图到form1窗

C++builder在paintbox中绘图问题
1,设置Canvas都为paintbox1->Canvas,但是代码YuanXing()却会绘图到form1窗体上,而BaiYeChuang却可以绘图到PaintBox1中这是什么原因?
2,怎么把位图Bitmap缩放到paintbox1的大小?

C/C++ code
void __fastcall TImageEffect::BaiYeChuang(){     //百叶窗效果    int   inum,icount,i,j;    inum   =100;   //这是百叶窗的叶数    icount=m_Height/inum;//每叶的高度    for(i= 0;i<icount+1;i+=1)    {        for(j=0;j<=inum;j++)        {            Canvas->CopyRect(Rect(8,icount*j,m_Width+8,icount*j+i),Bitmap->Canvas,Rect(0,icount*j,m_Width,icount*j+i));            Sleep(1);            //for   (int  blank=0;blank <90000;blank++);        }    }}//圆形效果void __fastcall TImageEffect::YuanXing(){    HRGN   MyRgn;    int   j=sqrt(Bitmap-> Width*Bitmap-> Width+Bitmap-> Height*Bitmap-> Height)/2+2;    for   (int   i=1;i <j;i++)    {        MyRgn=CreateEllipticRgn(Bitmap-> Width/2-i+8,Bitmap-> Height/2-i+8,Bitmap-> Width/2+i+8,Bitmap-> Height/2+i+8);        SelectObject(Canvas-> Handle,MyRgn);        Canvas-> Draw(8,8,Bitmap);        DeleteObject(MyRgn);    }}


[解决办法]
探讨
C/C++ code
Graphics::TBitmap* Bitmap1=new Graphics::TBitmap;
Bitmap1->LoadFromFile("2.bmp");
Bitmap=new Graphics::TBitmap;
Bitmap->Canvas->CopyMode=cmSrcCopy;
Bitmap->Canvas->……

[解决办法]
代码改一下,你首先说的为什么会画到窗体上,是因为Canvas指的就是当前窗体的画布。还有你要先设置好Bitmap的大小。实现的效果你自己调整。
C/C++ code
void __fastcall TForm1::Button1Click(TObject *Sender){Graphics::TBitmap* Bitmap1=new   Graphics::TBitmap;    Bitmap1->LoadFromFile("c:\\2.bmp");    Graphics::TBitmap*    Bitmap =new   Graphics::TBitmap;    Bitmap->Canvas->CopyMode=cmSrcCopy;    Bitmap->Width = PaintBox1->Width ;    Bitmap->Height = PaintBox1->Height ;    Bitmap->Canvas->CopyRect(PaintBox1->BoundsRect,Bitmap1->Canvas,Rect(0,0,Bitmap1->Width,Bitmap1->Height));  //百叶窗效果    int   inum,icount,i,j;    inum   =100;   //这是百叶窗的叶数    icount=PaintBox1->Height/inum;//每叶的高度    for(i= 0;i<icount+1;i+=1)    {        for(j=0;j<=inum;j++)        {            PaintBox1->Canvas->CopyRect(Rect(8,icount*j,PaintBox1->Width +8,icount*j+i),Bitmap->Canvas,Rect(0,icount*j,PaintBox1->Width ,icount*j+i));            Sleep(1);            //for   (int  blank=0;blank <90000;blank++);        }    }    delete Bitmap1;    delete Bitmap;}//---------------------------------------void __fastcall TForm1::Button3Click(TObject *Sender){Graphics::TBitmap* Bitmap1=new   Graphics::TBitmap;    Bitmap1->LoadFromFile("c:\\2.bmp");    Graphics::TBitmap*    Bitmap =new   Graphics::TBitmap;    Bitmap->Canvas->CopyMode=cmSrcCopy;    Bitmap->Width = PaintBox1->Width ;    Bitmap->Height = PaintBox1->Height ;    Bitmap->Canvas->CopyRect(PaintBox1->BoundsRect,Bitmap1->Canvas,Rect(0,0,Bitmap1->Width,Bitmap1->Height));    //PaintBox1->Canvas-> Draw(0,0,Bitmap);   HRGN   MyRgn;    int   j=sqrt(Bitmap-> Width*Bitmap-> Width+Bitmap-> Height*Bitmap-> Height)/2+2;    for   (int   i=1;i <j;i++)    {        MyRgn=CreateEllipticRgn(Bitmap-> Width/2-i+8,Bitmap-> Height/2-i+8,Bitmap-> Width/2+i+8,Bitmap-> Height/2+i+8);        SelectObject(PaintBox1->Canvas-> Handle,MyRgn);        PaintBox1->Canvas-> Draw(8,8,Bitmap);        DeleteObject(MyRgn);    }    delete Bitmap1;    delete Bitmap;}//--------------------------------------- 

热点排行