16,472
社区成员
发帖
与我相关
我的任务
分享
error C2664: “CMemDC::CMemDC(const CMemDC &)”: 不能将参数 1 从“CDC *”转换为“const CMemDC &”
error C2039: “SetBkMode”: 不是“CMemDC”的成员
error C2664: “CDataShowView::ShowBackground”: 不能将参数 1 从“CMemDC *”转换为“CDC *”
error C2664: “void CDataShowView::DrawLine(CDC *)”: 不能将参数 1 从“CMemDC *”转换为“CDC *”
void CDataShowView::OnDraw(CDC* pDC)
{
CDataShowDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if (!pDoc)
return;
CMemDC* pMemDC = NULL;
pMemDC = new CMemDC(pDC);
pMemDC->SetBkMode(TRANSPARENT);
ShowBackground(pMemDC); //显示背景(黑色)
DrawLine(pMemDC); //画打开bin文件里数据的线
delete pMemDC;
}
CDC memdc; memdc.CreateCompatibleDC( pDC ); //声明一个DC//将该DC创建为与pDC兼容的内存DC
CRect rt; GetClientRect( &rt ); //取得当前窗口客户区的大小
CBitmap membmp; membmp.CreateCompatibleBitmap( pDC, rt.right - rt.left, rt.bottom - rt.top ); //声明一个位图//创建一个与pDC匹配的兼容位图
memdc.SelectObject( &membmp ); //声明内存DC使用内存位图
memdc.FillSolidRect( rt, RGB( 255, 255, 255 ) ); //使用画刷清理背景为固定颜色
//------------------------------------------------//
//memdc绘图
//------------------------------------------------//
pDC->BitBlt( 0, 0, rt.right, rt.bottom, &memdc, 0, 0, SRCCOPY ); //将内存DC拷贝到pDC进行显示
memdc.DeleteDC( ); membmp.DeleteObject( ); //清理临时变量内存
1.你这种绘图方式本身就有问题,在OnDraw中不直接使用pDC反而再另外声明一个CMemDC,光是创建和销毁你就浪费多少效率啊。
2.没用过CMemDC,但是觉得这个DC还不如直接使用如上的传统的“内存绘图代码”。但是就算是这段代码也不要放在OnDraw里面。