MFC 如何制作类似PS中的图层

鯎鯎 2013-05-24 05:21:08
目前我有个需求,在画了一折线图后,鼠标移动时,绘出一条跟随鼠标的竖线。如图的红线。


如果直接画上去,原本的折线图会被覆盖,当鼠标移动,竖线、折线图都得重绘。
如果我绘画在不是折现图的图层中,我就可以直接擦掉那一层,重绘就好了。
不知道有没有高手研究过这种或类似这样的画法?
...全文
299 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
鯎鯎 2013-05-29
  • 打赏
  • 举报
回复
通过双缓冲解决了,InvalidateRect到现在还不知道怎么用。使用了双缓冲,原来的坐标也边了,不能再用SetViewportOrg了。只能改了。不知道是不是因为用了CBitmap,不能定义Viewport呢?
鯎鯎 2013-05-29
  • 打赏
  • 举报
回复
引用 8 楼 qq6648208281 的回复:
地下那些数据 全部存放在一个dc上面 然后每次更新的时候 把dc上的东西复制到窗口的dc上 再进行绘制那个线条 既保证了效率 也不闪烁
我尝试了双缓冲,但是原本画好的坐标系却画不出来了,后来发现就m_pMemDC->SetMapMode(MM_LOMETRIC);这里的问题,难道CBitmap不可以用这种方式画图吗?
鯎鯎 2013-05-28
  • 打赏
  • 举报
回复
引用 6 楼 qq6648208281 的回复:
双缓冲 那条线最后再绘制
在网上看到这名词很多次,却不知道要怎么做才是双缓冲。。可以举个例吗?
Yun__ 2013-05-28
  • 打赏
  • 举报
回复
地下那些数据 全部存放在一个dc上面 然后每次更新的时候 把dc上的东西复制到窗口的dc上 再进行绘制那个线条 既保证了效率 也不闪烁
Yun__ 2013-05-27
  • 打赏
  • 举报
回复
双缓冲 那条线最后再绘制
鯎鯎 2013-05-27
  • 打赏
  • 举报
回复
引用 2 楼 jimoguilai 的回复:
InvalidateRect可以指定区域的
可能是我太 小白 了,这个不会用,不知道在Onpaint要如何处理这发出的消息。
Chivalry 2013-05-24
  • 打赏
  • 举报
回复
搜一下 VC 内存DC 的使用方法,可以先把数据线绘制到内存DC里面,下次在用的时候,直接把内存DC复制到界面DC就可以了
鯎鯎 2013-05-24
  • 打赏
  • 举报
回复
引用 1 楼 jimoguilai 的回复:
可以指定重绘区域吧,每次移动的时候只重绘鼠标附近的那个小区域试试看?
因为数据来自数据池,重绘时要遍历数据池,这样是可以但好像有点麻烦。可以先暂存那区域吗?对这方面不熟,如果说得太2了,不要见怪。
Chivalry 2013-05-24
  • 打赏
  • 举报
回复
InvalidateRect可以指定区域的
Chivalry 2013-05-24
  • 打赏
  • 举报
回复
可以指定重绘区域吧,每次移动的时候只重绘鼠标附近的那个小区域试试看?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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