GDI画图问题

尹绵绵 2010-08-28 12:05:37
今天和同事遇上一个图形问题,要做一个流程图之类的东西,本来打算用GDI,因为界面上用panel分成了几部分(就是form完全被panel覆盖了),所以先声明一个canvas实例,然后用panel的句柄绑定到这个canvas实例上,然后画箭头。
箭头是画出来了,但是重画窗体的时候,箭头就消失了,就算把画图的语句写在onpaint时间里也没用,后来又覆盖了WM_PAINT消息处理方法,情况就成这样了,窗体出来以后是没有箭头的,但是如果拿个别的窗体挡住画箭头的区域再那开,箭头就出现了,最大化和还原也会出现,但是最小化再还原就不会出现...现在很迷惑,没法解释这个现象。有没有高手给解释一下这是怎么回事啊,不都是WM_PAINT消息吗,为什么会不一样效果呢?
要是有别的思路在panel上画这个箭头的话也请指点一下。
谢谢了!
...全文
157 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
genispan 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tigermian 的回复:]

引用 2 楼 genispan 的回复:

直接把箭头画在FORM上

可是那样panel会把form上的箭头挡住的...
[/Quote]
可将FORM的parent置为panel 然后在FORM上画,这样就不会被挡住了
尹绵绵 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maozefa 的回复:]

贴代码!
[/Quote]


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;
taxi 2010-09-02
  • 打赏
  • 举报
回复
不要在TPanel上画,在TPanel上放TPaintBox画图挺方便的。
xiedewei 2010-09-02
  • 打赏
  • 举报
回复
Panel是有Canvas的,可以直接在Panel上画,看阿发伯的文章http://blog.csdn.net/maozefa/archive/2007/08/06/1728621.aspx
尹绵绵 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maozefa 的回复:]

贴代码!
[/Quote]
因为特殊情况,上网有点不方便,等有机会把代码给你发一下,就两三句话...可是我记不清具体的了...
尹绵绵 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 genispan 的回复:]

直接把箭头画在FORM上
[/Quote]
可是那样panel会把form上的箭头挡住的...
genispan 2010-09-01
  • 打赏
  • 举报
回复
直接把箭头画在FORM上
阿发伯 2010-08-28
  • 打赏
  • 举报
回复
贴代码!

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧