MFC中绘图的问题
我想实现这样一个功能,绘图时,已经存在一个背景图,这个背景图也是自己绘制的,没有颜色,只是单纯的一些格子。再次作图会在这些格子上操作,擦除时只对后来的绘图擦除,对格子没有...
我想实现这样一个功能,绘图时,已经存在一个背景图,这个背景图也是自己绘制的,没有颜色,只是单纯的一些格子。再次作图会在这些格子上操作,擦除时只对后来的绘图擦除,对格子没有影响。有人说用双画布,第一层作图,第二层添加一层透明的画布就可以了。我想知道怎么实现?或者其他解决办法也行……
换一个说法
我在单文档中的OnDraw() 函数中画了一些表格
然后在鼠标移动消息中添加了画直线、举行、圆、橡皮擦等功能
使用橡皮擦功能,不但能擦除自己画的线,也跟同时会把表格给擦除
请问怎样让它不会擦除掉表格呢?
大神说说思路 附几句代码最好不过了 展开
换一个说法
我在单文档中的OnDraw() 函数中画了一些表格
然后在鼠标移动消息中添加了画直线、举行、圆、橡皮擦等功能
使用橡皮擦功能,不但能擦除自己画的线,也跟同时会把表格给擦除
请问怎样让它不会擦除掉表格呢?
大神说说思路 附几句代码最好不过了 展开
3个回答
展开全部
呵呵刚答一个画线的就复制过来了
备份一个DC每次都重画直线的区域(重画区域会增加代码量,不怕屏闪就全重画就好了),再把线画上,取消就不画线就好了。
CDC* pDC;
CBitmap m_bitmap; // Offscreen bitmap
CBitmap* m_pOldBitmap; // bitmap originally found in CMemDC
CDC* m_pDC; // Saves CDC passed in constructor
CRect m_rect; // Rectangle of drawing area.
// 备份DC
CreateCompatibleDC(pDC);
m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
m_pOldBitmap = SelectObject(&m_bitmap);
// 画DC
m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
this, m_rect.left, m_rect.top, SRCCOPY);
SelectObject(m_pOldBitmap);
备份一个DC每次都重画直线的区域(重画区域会增加代码量,不怕屏闪就全重画就好了),再把线画上,取消就不画线就好了。
CDC* pDC;
CBitmap m_bitmap; // Offscreen bitmap
CBitmap* m_pOldBitmap; // bitmap originally found in CMemDC
CDC* m_pDC; // Saves CDC passed in constructor
CRect m_rect; // Rectangle of drawing area.
// 备份DC
CreateCompatibleDC(pDC);
m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
m_pOldBitmap = SelectObject(&m_bitmap);
// 画DC
m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
this, m_rect.left, m_rect.top, SRCCOPY);
SelectObject(m_pOldBitmap);
展开全部
怎样让它不会擦除掉表格呢?
你绘制出的格子或者点线面,你应该自己清楚在什么位置
你是怎么擦除的?怎么会控制不了擦除啊,判断不是网格才擦除就可以了啊
其实我做的话
画直线、举行、圆、橡皮擦等功能,我都会存到List里去,一个图形绘制,一个Item,放到List里去
擦除,就是判断鼠标操作时,选择的点中的是什么坐标,这个坐标位置处是哪个图形,从List里删除这个Item后,重新绘制所有东西,包括什么背景幕布,网格,List中的所有各种图形
你绘制出的格子或者点线面,你应该自己清楚在什么位置
你是怎么擦除的?怎么会控制不了擦除啊,判断不是网格才擦除就可以了啊
其实我做的话
画直线、举行、圆、橡皮擦等功能,我都会存到List里去,一个图形绘制,一个Item,放到List里去
擦除,就是判断鼠标操作时,选择的点中的是什么坐标,这个坐标位置处是哪个图形,从List里删除这个Item后,重新绘制所有东西,包括什么背景幕布,网格,List中的所有各种图形
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先把格子绘制到一个CBitmap中
以后绘制时,先SelectObject这个CBitmap,然后再绘制其他
以后绘制时,先SelectObject这个CBitmap,然后再绘制其他
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询