内存CD画图, 拖动图移动

wyffyw2000 2008-10-15 09:39:33
CDC m_MemDC;//位图CDC对象
CDC *m_pDC; //公用的CDC对象
CDC *pDC=GetDC();//公用的CDC对象
m_MemDC.CreateCompatibleDC(pDC);


m_pDC->BitBlt(0,0,Rect.Width(),Rect.Height(),&m_MemDC,0,0,SRCCOPY);


m_MemDC是内存DC,m_MemDC我提前画了一个很大的图在里面了(是屏幕的好几倍大),我想问的是:
我用m_pDC->BitBlt(0,0,Rect.Width(),Rect.Height(),&m_MemDC,0,0,SRCCOPY); 在屏幕上显示这个图,,我拖动的时候,想让他显示其他没有显示的部分,为什么老是只当前屏幕上显示的图可以看到,其他没有显示过的部分,怎么拖也拖不出来呢???? (如果我说的不明白,请告诉我,我再解释)

比如画图软件,放大了,,拖动的时候 也显示其他
(1)m_MemDC画过一次 后,应该一直存在,对吗?
(2)如果一直存在,那我拖动鼠标的时候,就应该把没有显示出来的图 ,让它显示在屏幕上,是吧? 用m_pDC->BitBlt吗?? 我用了怎么不能显示其他没有显示过的部分呢????
请各位同仁 帮忙
...全文
251 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyffyw2000 2008-10-21
  • 打赏
  • 举报
回复
?? 没有帮解惑答疑的吗
wyffyw2000 2008-10-17
  • 打赏
  • 举报
回复
问个小问题了, 大家画图一般都谈论GDI+的.......
象我上面的代码
CDC m_MemDC;//位图CDC对象
CDC *m_pDC; //公用的CDC对象
CDC *pDC=GetDC();//公用的CDC对象
m_MemDC.CreateCompatibleDC(pDC);
...
m_MemDC.lineto()
m_MemDC.MOVETO()
...
m_MemDC.lineto()
m_MemDC.MOVETO()
...
m_pDC->BitBlt(0,0,Rect.Width(),Rect.Height(),&m_MemDC,0,0,SRCCOPY);


我这样写的代码 ,,落后了吗???
我自己觉得 应该是比GDI+ 更底层一些吧? (功能比GDI+强吧? 可能操作画图比GDI+要麻烦些?)
有学习VC6,,.NET, 学习画图,GDI, GDI+ 的哥们 帮解释下吧!
wyffyw2000 2008-10-16
  • 打赏
  • 举报
回复
hyg2002 的方法,, 如果图片很的的话,,,,,,本来一个m_MemDC就占用了很大的内存了,, 现在弄了两个DC,,,,,
可行吗???\
如果图片几十M--甚至上百M ???
smallfishff 2008-10-16
  • 打赏
  • 举报
回复
楼主可以使用显示多少载入多少的方式 不过实现有点麻烦.

如果按你现在这种方法 是较简单的.2楼的方法试过还不行的话 那么也许是你原图的问题.
将第6个参数改变后画出的图有什么改变?

可以贴出创建m_MemDC的全代码看看.
wyffyw2000 2008-10-15
  • 打赏
  • 举报
回复
我换了,,也不行的,, 屏幕上只能显示当前的一屏 图片,,其他的拖动不出来
winnuke 2008-10-15
  • 打赏
  • 举报
回复
m_pDC->BitBlt(0,0,Rect.Width(),Rect.Height(),&m_MemDC,0,0,SRCCOPY);
吧第6和第7个参数换成拖动后的新位置。
hyg 2008-10-15
  • 打赏
  • 举报
回复
我用GDI+做过这个功能
你要用多个内存缓存才可能达到你说的那个效果的
比喻你可以用3缓存:m_MemDC1,m_MemDC2,m_DC3
m_MemDC1保存你的整张图
m_MemDC2保存m_MemDC1中某块区域的图片(这块区域就是你要绘制到屏幕的区域,你可能要写一个算法计算这个区域)
m_MemDC2然后把m_MemDC2绘制到设备环境m_DC3(你的窗口)

19,464

社区成员

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

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