今天和同事遇上一个图形问题,要做一个流程图之类的东西,本来打算用GDI,因为界面上用panel分成了几部分(就是form完全被panel覆盖了),所以先声明一个canvas实例,然后用panel的句柄绑定到这个canvas实例上,然后画箭头。
  箭头是画出来了,但是重画窗体的时候,箭头就消失了,就算把画图的语句写在onpaint时间里也没用,后来又覆盖了WM_PAINT消息处理方法,情况就成这样了,窗体出来以后是没有箭头的,但是如果拿个别的窗体挡住画箭头的区域再那开,箭头就出现了,最大化和还原也会出现,但是最小化再还原就不会出现...现在很迷惑,没法解释这个现象。有没有高手给解释一下这是怎么回事啊,不都是WM_PAINT消息吗,为什么会不一样效果呢?
  要是有别的思路在panel上画这个箭头的话也请指点一下。
  谢谢了!

解决方案 »

  1.   

    可是那样panel会把form上的箭头挡住的...
      

  2.   

    可将FORM的parent置为panel 然后在FORM上画,这样就不会被挡住了
      

  3.   

    Panel是有Canvas的,可以直接在Panel上画,看阿发伯的文章http://blog.csdn.net/maozefa/archive/2007/08/06/1728621.aspx
      

  4.   

    不要在TPanel上画,在TPanel上放TPaintBox画图挺方便的。
      

  5.   

    var
      g: TGPGraphics;
      aCanvas : TCanvas;
      p: TGPPen;procedure TForm1.FormCreate(Sender: TObject);
    begin
      aCanvas := TCanvas.Create;
      aCanvas.Handle:= GetDC(Panel1.Handle);
      g:= TGPGraphics.Create(aCanvas.Handle);
      p:= TGPPen.Create(aclBlue, 8);
      p.SetEndCap(LineCapArrowAnchor);
    end;procedure TForm1.WMPaint(var Msg: TWMPaint);
    begin
      g.DrawLine(p,10,10,40,40);
      inherited;
    end;