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

想在MDI子窗体上加入背景图片但是闪烁很厉害解决方案

2012-03-09 
想在MDI子窗体上加入背景图片但是闪烁很厉害想在MDI子窗体(登陆窗体)上加入背景图片,可是闪烁的很厉害。如

想在MDI子窗体上加入背景图片但是闪烁很厉害
想在MDI子窗体(登陆窗体)上加入背景图片,可是闪烁的很厉害。

如果真的让客户使用的话,肯定不行!

百度了一段时间了,都是在MDI主窗体上加入背景图片,就是搜索不到在子窗体上的

现求方法。。。谢谢!

[解决办法]
楼主真勤奋,下面代码不知道能不能帮到你

Delphi(Pascal) code
var   tmpbk:tbitmap;//tmpbk为临时存储背景                  // **** tmpt没有用, 去掉begin  // **** inherited paint;  这句去掉   canvas.Lock ;   if forebmp.Empty  then exit;         tmpbk:=tbitmap.Create ;       tmpbk.Width:=width;       tmpbk.Height:=height;       tmpbk.PixelFormat:=pf24bit;       bitblt(tmpbk.canvas.handle, 0, 0, width, height, canvas.handle, 0, 0, SRCCOPY);      { 所有关于tmpt的操作换成上面一句就够了        tmpt:=tbitmap.Create ;       tmpt.Width:=parent.Width ;       tmpt.Height:=parent.Height;       tmpt.Canvas.Handle :=getdc(parent.Handle);//获得parent的hdc      //拷贝tmpt到tmpbk       tmpbk.Canvas.CopyRect(rect(0,0,tmpbk.Width ,tmpbk.height),tmpbk.canvas,boundsrect);       ReleaseDC(parent.Handle ,tmpt.Canvas.Handle  );       tmpt.Free ; }      if (not fmaskbmp.Empty) then  //掩模图片是否为空         copymask(forebmp,fmaskbmp,tmpbk,canvas)//合成前景、背景图片 根据掩模图片     else         canvas.StretchDraw(rect(0,0,width,height),forebmp);    canvas.Unlock ;    tmpbk.free;      // 漏了这句end;
[解决办法]
又是这种问题。。
子窗体的 WM_ERASEBKGND消息重新处理一下,使之不用默认颜色清除背景。
procedure WMEraseBKGnd(var Message:TWMEraseBKGnd);message WM_ERASEBKGND;

procedure TForm1.WMEraseBKGnd(var Message:TWMEraseBKGnd);message WM_ERASEBKGND;
begin
Message.Result:=1;
end;


基本上是这个原因引起的。
如果还有,那要考虑你的绘制方法了

热点排行