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

关于图像显示解决思路

2012-02-14 
关于图像显示 - C++ Builder / Windows SDK/APIC/C++ codevoid thread(LPVOID p){while(1){Graphics::TBit

关于图像显示 - C++ Builder / Windows SDK/API

C/C++ code
void thread(LPVOID p) 
{
  while(1)
  {
    Graphics::TBitmap* Bmp1=new Graphics::TBitmap;
    Graphics::TBitmap* Bmp2=new Graphics::TBitmap;
    Bmp1->LoadFromFile("c:\\000.bmp");
    Bmp1->PixelFormat=pf24bit;
    Bmp2->PixelFormat=pf24bit;
    Bmp2->Width=Bmp1->Width;
    Bmp2->Height=Bmp1->Height;
    // SetStretchBltMode(Bmp1->Canvas->Handle,COLORONCOLOR);
      for(int i=0,j=0;i <Bmp1->Height;i+=2)
    {
      j=i;
      while(j>0)
      {
          ::StretchBlt(Bmp2->Canvas->Handle,0,j-1,
          Bmp1->Width,1,Bmp1->Canvas->Handle,0,
          Bmp1->Height-(i-j-1),Bmp1->Width,1,
          SRCCOPY);
          ::StretchBlt(Bmp2->Canvas->Handle,0,Bmp2->Height-j,
          Bmp2->Width,1,Bmp1->Canvas->Handle,0,i-j,Bmp2->Width,1,
          SRCCOPY);
          j-=2;
      }
      Form1->Canvas->Draw(0,0,Bmp2);
      Sleep(20);
    }
    Bmp2->Canvas->CopyRect(Rect(0,0,Bmp2->Width,Bmp2->Height),
                    Bmp1->Canvas,Rect(0,0,Bmp1->Width,Bmp1->Height));
    Sleep(10);
    delete Bmp1;
    delete Bmp2;
  }
void __fastcall TForm1::FormCreate(TObject* Sender)
{
  _beginthread(thread,0,0);
}
}

为了避免主窗体的延迟反应,于是特意创建了一个线程来画图,但是线程在绘图时,如果鼠标在窗体上移动,则画面绘制会被中断,影响显示效果,请问该如何避免这种情况?

[解决办法]
Form的双缓冲开启了没?
[解决办法]
把你线程的优先级调到最高。
[解决办法]
不建议使用线程直接绘制到Form上,Form上的绘制还是应该响应 OnPaint事件。
[解决办法]
一般响应窗体事件不会影响画面显示。

热点排行