主要代码如下:显示代码如下: CDC * pDialogDC = GetDC(); Invalidate(); UpdateWindow(); CPen pen(PS_SOLID,2,RGB(255,0,0)); pDialogDC->SelectObject(&pen); for (int i = 0;i < picVector.size(); i++) { switch(picVector[i]->picFlag) { case 0: pDialogDC->MoveTo(picVector[i]->startPoint); pDialogDC->LineTo(picVector[i]->endPoint); break; case 1: pDialogDC->Ellipse(picVector[i]->startPoint.x,picVector[i]->startPoint.y,picVector[i]->endPoint.x,picVector[i]->endPoint.y); break; case 2: pDialogDC->Rectangle(picVector[i]->startPoint.x,picVector[i]->startPoint.y,picVector[i]->endPoint.x,picVector[i]->endPoint.y); break; } } ReleaseDC(pDialogDC);往vector容器中添加获取的元素(包括所画图的类型,鼠标按下、抬起两点):void CForwardBackDlg::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default upPoint = point; CPicture * pPic = new CPicture(); pPic->picFlag = style; pPic->startPoint = downPoint; pPic->endPoint = upPoint; picVector.push_back(pPic); bakeupVector.push_back(pPic); //delete pPic;//检查传递到容器中是否是地址传递,答案: 是 Invalidate();//只刷新对话框中控件 不刷新对话框自身 //UpdateWindow(); CDialog::OnLButtonUp(nFlags, point);}撤销代码如下: if(picVector.size() > 0) { //delete picVector[picVector.size() - 1]; picVector.pop_back();
参考:
void CForwardBackDlg::OnPaint() { CDC * pControlDC = GetDC(); Invalidate(); UpdateWindow(); pControlDC->SelectStockObject(BLACK_BRUSH); pControlDC->Rectangle(0,0,100,100); ReleaseDC(pControlDC);
}
转载于:https://www.cnblogs.com/shenchao/archive/2012/10/04/2711455.html
相关资源:VC 绘图程序,界面设计,对话框编程