MFC 中抑或笔画线以及CDC作为对话框类的成员初始化问题
鼠标左键按下画线,我想在左键弹起的过程中擦除,我使用了抑或笔,但是发现无法擦除。我以为是因为CDC每次在鼠标响应的过程中是重新采用GetDC()获得的,不是同一个,因而在...
鼠标左键按下画线,我想在左键弹起的过程中擦除,我使用了抑或笔,但是发现无法擦除。我以为是因为CDC每次在鼠标响应的过程中是重新采用GetDC()获得的,不是同一个,因而在鼠标左键中设置抑或笔没用,所以我在这个类中定义了一个CDC*pDC,但是在类的构造中初始化时,运行会出错,于是我在类的其他函数中初始化,但是在鼠标左键按下和弹起的函数中依然每次都要进行pDC=this→GetDC()操作,最后我在鼠标按下和弹起中都加上了SetROP2(R2_XORPEN),最终虽然能够实现擦除,但是画的过程中,在有背景颜色的地方,画笔颜色会异常。。不知道以上问题如何解决,我的目的也就是实现鼠标左键弹起消去所画线,而且左键按下所画线颜色不会出现异常。。。
展开
展开全部
不建议使用擦除,因为线后面的东西多了之后擦除一样会出错。
备份一个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);
备份一个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);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询