在视图类中使用CClientDC绘图
CClientDC pDC = new CClientDC(this); pDC->MoveTo(...) pDC->LineTo(...) pDC->SelectStockObject(...) pDC->Rectangle(....)
改变鼠标外观
BOOL CPainterView::PreCreateWindow(CREATESTRUCT &cs) { cs.lpszClass = AfxRegisterWndClass(...); }
删除原来的图形
nOldMode = pDC->GetROP2(); pDC->SetROP2(R2_NOT); 通过使用像素反色重新绘制原来图形(删除) 绘制新图形 pDC->SetROP2(nOldMode);
CMetaFileDC与CMetaFile
CMetaFileDC用于将绘图内容保存到内存,以便之后的重绘操作。
重绘操作
/*获取MetaFile句柄,重绘*/ HMETAFILE MetaFileHandle = pDoc->pMetaFileDC->Close(); pDC->PlayMetaFile(MetaFileHandle); /*获取当前MetaFileDC*/ CMetaFileDC *ReplacementMetaFile = new CMetaFileDC(); ReplacementMetaFile->Create(); ReplacementMetaFile->PlayMetaFile(MetaFileHandle); /*保存当前MetaFileDC*/ DeleteMetaFile(MetaFileHandle); delete pDC->pMetaFileDC; pDC->pMetaFileDC = ReplacementMetaFile;
保存到文件
CopyMetaFile(MetaFileHandle,_T("painter.wmf"));
从文件获取
HMETAFILE MetaFileHandle = GetMetaFile(_T("painter.wmf")); CMetaFileDC *ReplacementMetaFile = new CMetaFileDC(); ReplacementMetaFile->Create(); ReplacementMetaFile->PlayMetaFile(MetaFileHandle); DeleteMetaFile(MetaFileHandle); delete pDC->pMetaFileDC; pDC->pMetaFileDC = ReplacementMetaFile; Invalidate();