关于图像显示解决思路
关于图像显示 - C++ Builder / Windows SDK/API
为了避免主窗体的延迟反应,于是特意创建了一个线程来画图,但是线程在绘图时,如果鼠标在窗体上移动,则画面绘制会被中断,影响显示效果,请问该如何避免这种情况?
------解决方案--------------------
Form的双缓冲开启了没?
------解决方案--------------------
把你线程的优先级调到最高。
------解决方案--------------------
不建议使用线程直接绘制到Form上,Form上的绘制还是应该响应 OnPaint事件。
------解决方案--------------------
一般响应窗体事件不会影响画面显示。
- 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事件。
------解决方案--------------------
一般响应窗体事件不会影响画面显示。