MFC 中抑或笔画线以及CDC作为对话框类的成员初始化问题

鼠标左键按下画线,我想在左键弹起的过程中擦除,我使用了抑或笔,但是发现无法擦除。我以为是因为CDC每次在鼠标响应的过程中是重新采用GetDC()获得的,不是同一个,因而在... 鼠标左键按下画线,我想在左键弹起的过程中擦除,我使用了抑或笔,但是发现无法擦除。我以为是因为CDC每次在鼠标响应的过程中是重新采用GetDC()获得的,不是同一个,因而在鼠标左键中设置抑或笔没用,所以我在这个类中定义了一个CDC*pDC,但是在类的构造中初始化时,运行会出错,于是我在类的其他函数中初始化,但是在鼠标左键按下和弹起的函数中依然每次都要进行pDC=this→GetDC()操作,最后我在鼠标按下和弹起中都加上了SetROP2(R2_XORPEN),最终虽然能够实现擦除,但是画的过程中,在有背景颜色的地方,画笔颜色会异常。。不知道以上问题如何解决,我的目的也就是实现鼠标左键弹起消去所画线,而且左键按下所画线颜色不会出现异常。。。 展开
 我来答
凭康适Bc
2013-07-21 · 超过48用户采纳过TA的回答
知道小有建树答主
回答量:142
采纳率:0%
帮助的人:116万
展开全部
不建议使用擦除,因为线后面的东西多了之后擦除一样会出错。
备份一个DC每次都重画直线的区域(重画区域会增加代码量,不怕屏闪就全重画就好了),再把线画上,取消就不画线就好了。我认为这个方法应该是最好的。
MFC代码参考下不一定对
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);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式