一个MFC绘制图形的问题

bird1982 2005-08-04 02:25:04
在一个对话框窗体中放一个PICTURE控件,ONPAINT事件里给控件着了色,现在在空间上面用PEN绘图,绘制出的图形一切屏或者一碰屏幕就没了,这个问题该怎么处理阿?最好不要告诉我重画,实时显示,重画会很麻烦
...全文
476 33 打赏 收藏 举报
写回复
33 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bird1982 2005-08-05
是不是我可以把所有的东西都画到一个MEMDC里去?
  • 打赏
  • 举报
回复
future-coming 2005-08-05
用memDC;
全黑的很正常,自己画一个想要的背景色。
  • 打赏
  • 举报
回复
bird1982 2005-08-05
搞明白了,那个,有个问题,我要换工具,即SelectObject是用pDC还是用memDC换?
另外就是,我的程序中出了个比较麻烦的事情,因为我的背景色是用pDC画的,现在要用BitBlt处理的话,马上就挂掉了,背景改全黑的了~~~~~-_-!真不知道该怎么办了~~~
  • 打赏
  • 举报
回复
future-coming 2005-08-05
http://www.vckbase.com/code/downcode.asp?id=2360,下下来看看
  • 打赏
  • 举报
回复
bird1982 2005-08-05
为啥我用就是不好使呢?
我整半天了,没啥错误为啥我就看不到图呢?
  • 打赏
  • 举报
回复
future-coming 2005-08-05
定义 CDC *pDC;
CDC MemDC;
CBitmap MemBitmap;
初始化里面
pDC = m_ctrlWave.GetDC();

MemDC.CreateCompatibleDC(pDC);

MemBitmap.CreateCompatibleBitmap(pDC,1024,768);

CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);

MemDC.FillSolidRect(0,0,1024,768,RGB(255,255,255));
弄个按钮触发画图事件
MemDC.MoveTo(0,0);
MemDC.LineTo(100,100);

pDC->BitBlt(0,0,1024,768,&MemDC,0,0,SRCCOPY);
我是用一个PictureBOX作绘图区域
  • 打赏
  • 举报
回复
bird1982 2005-08-05
定义 CDC *pDC;
CDC MemDC;
CBitmap MemBitmap;
初始化里面
pDC = m_ctrlWave.GetDC();

MemDC.CreateCompatibleDC(NULL);

MemBitmap.CreateCompatibleBitmap(pDC,0,0);

CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);

MemDC.FillSolidRect(0,0,100,100,RGB(255,255,255));
弄个按钮触发画图事件
MemDC.MoveTo(0,0);
MemDC.LineTo(100,100);

pDC->BitBlt(0,0,100,100,&MemDC,0,0,SRCCOPY);
我是用一个PictureBOX作绘图区域

  • 打赏
  • 举报
回复
bird1982 2005-08-05
偶的邮箱 163superstar@163.com
哪位高人做个最基本的让偶瞧瞧,偶这里把代码都添加了,可还是没看出效果来
  • 打赏
  • 举报
回复
future-coming 2005-08-05
你把你的代码贴出来,让大家看看
  • 打赏
  • 举报
回复
bird1982 2005-08-05
谁做个简单点的例子,就是ONINITDIALOG()里初始化,弄个BUTTON事件画出个图来就成,我按上面的方法做,什么地方都不报错,就是出不来图形。
  • 打赏
  • 举报
回复
future-coming 2005-08-05
好用,楼主的代码可能不很完善
  • 打赏
  • 举报
回复
bird1982 2005-08-05
各位,明白的大虾,帮帮忙,YanDong_8212(谢科)的方法我用了,就是不好用,怎么也画不出来
  • 打赏
  • 举报
回复
future-coming 2005-08-05
关于这个问题:
hyamw(林锋)你的意思我明白了,但是有个比较大的问题,我每次画的是图形中的一段,就是来一段数据我计算一段,然后调用画图函数画一段,这样的话我m_MemDC里备份的总是我最后一次画的一段图形,等重画时就只重画最后一段了

这还不好解决,把以前的数据存到文档中,像队列一样先进先出,周而复始,这样便可以了;而且这样,你就可以不用创建一个CDC拷贝了(其实这个也不难嘛),而且这些数据你还可以经过处理后输出到文件或数据库中,以供历史数据显示或趋势显示。

利用内存画图然后复制到屏幕上,可以有效地解决闪烁问题。


  • 打赏
  • 举报
回复
hyamw 2005-08-05
那你每次画新图象的时候不清除m_MemDC里的内容。这样,上次的图像还会保存在MemDC里面
  • 打赏
  • 举报
回复
bird1982 2005-08-05
有个问题,YanDong_8212(谢科)帖子中的pDC是不是就是那个memDC?
  • 打赏
  • 举报
回复
bird1982 2005-08-05
becool3000(蓝色冰点),我下面的帖子里有解释,在那里面画不了,我不能调用ONPAINT()画图形,因为里面有计算处理过程,在ONPAINT()里处理有时会出错。
  • 打赏
  • 举报
回复
bird1982 2005-08-05
hyamw(林锋)你的意思我明白了,但是有个比较大的问题,我每次画的是图形中的一段,就是来一段数据我计算一段,然后调用画图函数画一段,这样的话我m_MemDC里备份的总是我最后一次画的一段图形,等重画时就只重画最后一段了
  • 打赏
  • 举报
回复
becool3000 2005-08-05
这个问题一直有啊
在OnPaint()里面画就可以了
  • 打赏
  • 举报
回复
hyamw 2005-08-05
为啥不在OnPaint()里面画?

如果你要用YanDong_8212(谢科) 的方法,你应该添加一个类成员:
CDC m_MemDC;
在OnInitDialog()的时候,对m_MemDC初始化。
每次绘制新的图像的时候,先对m_MemDC作图,然后复制到屏幕上。(要记得清除上次的图像)
在OnPaint()里面添加:把m_MemDC的内容复制到屏幕上
  • 打赏
  • 举报
回复
sun1126 2005-08-05
在onpaint函数里实现绘图操作,当需要实时刷新时发消息SendMessage(WM_PAINT)
程序会自动调用OnPaint函数重绘
  • 打赏
  • 举报
回复
加载更多回复(13)
发帖
界面

1.5w+

社区成员

VC/MFC 界面
社区管理员
  • 界面
加入社区
帖子事件
创建了帖子
2005-08-04 02:25
社区公告
暂无公告