VC 画坐标 方法2

来源:互联网 发布:linux telnet登陆root 编辑:程序博客网 时间:2024/05/21 15:01
      //////////////////////////////////////////////////////////////////////////
       //*******画坐标图*******
       //////////////////////////////////////////////////////////////////////////
CRect rect(250,300,600,600);
// GetClientRect(&rect);
       int nxLength=rect.Width();
       int nyLength=rect.Height();
 
       int nxDivisionNumber = 7;
       int nyDivisionNumber = 6;
 
       int nMeshLength;
 
       CString str;
       int i;
 
       CDC* pDC = this->GetDC();
 
  //     pDC->Rectangle(0,0,nxLength,nyLength);
 
       CPen* pPenRed = new CPen;                                          //创建画笔对象
       pPenRed->CreatePen(PS_SOLID, 1, RGB(255,0,0));  //红色画笔
 
       CPen* pPenGreen = new CPen;                                //创建画笔对象
       pPenGreen->CreatePen(PS_SOLID, 1, RGB(0,255,0));//绿色画笔
 
       CPen* pPenBlue = new CPen;                                  //创建画笔对象
       pPenBlue->CreatePen(PS_DOT, 1, RGB(0,0,255));     //蓝色画笔
 
       CPen* pPenBlack = new CPen;                                 //创建画笔对象
       pPenBlack->CreatePen(PS_SOLID, 1, RGB(0,0,0)); //黑色画笔
 
       //选中黑色画笔,并保存当前画笔
       CGdiObject* pOldPen = pDC->SelectObject(pPenBlack);
       pDC->MoveTo(rect.left,rect.top);                              //绘制坐标轴
       pDC->LineTo(rect.left,rect.bottom);                  //垂直轴
       pDC->LineTo(rect.right,rect.bottom);   //水平轴
 
       //横坐标箭头
       pDC->MoveTo(rect.right,rect.bottom);
       pDC->LineTo(rect.right-10,rect.bottom-3);
       pDC->LineTo(rect.right-10,rect.bottom+3);
       pDC->LineTo(rect.right,rect.bottom);
 
       //纵坐标箭头
       pDC->MoveTo(rect.left ,rect.top);
       pDC->LineTo(rect.left-3,rect.top+10);
       pDC->LineTo(rect.left+3,rect.top+10);
       pDC->LineTo(rect.left ,rect.top);
 
  pDC->SetBkMode(TRANSPARENT);  //设置背景透明
       //横坐标数字
       nMeshLength = (nxLength-40)/(nxDivisionNumber+1);
       for (i=1; i<nxDivisionNumber+1; i++){
              str.Format("%d",i);
              pDC->TextOut(rect.left-5+i*nMeshLength, rect.bottom+5, str);
       }
 
       //横坐标标识
       str.Format("数据序列");
       pDC->TextOut(rect.left-5+i*nMeshLength,rect.bottom+5,str);
 
       //纵坐标数字
       nMeshLength = (nyLength-40)/(nyDivisionNumber+1);
       for (i=0; i<nyDivisionNumber+1; i++){
              str.Format("%1.1f",(float)(i*0.5));
              pDC->TextOut(rect.left-30, rect.bottom-i*nMeshLength, str);
       }
 
       //纵坐标标识
       str.Format("电压(V)");
       pDC->TextOut(rect.left+10,rect.top-15,str);
 
       //网格线
       pDC->SelectObject(pPenBlue);
 
       nMeshLength = (nxLength-40)/(nxDivisionNumber+1);
       for (i=1; i<nxDivisionNumber+2; i++){
              pDC->MoveTo(rect.left+i*nMeshLength,rect.bottom);
              pDC->LineTo(rect.left+i*nMeshLength,rect.top);
       }
 
       nMeshLength = (nyLength-40)/(nyDivisionNumber+1);
       for (i=1; i<nyDivisionNumber+2; i++){
              pDC->MoveTo(rect.left , rect.bottom-i*nMeshLength);
              pDC->LineTo(rect.right, rect.bottom-i*nMeshLength);
       }
 
       //恢复以前的画笔
       pDC->SelectObject(pOldPen);
 
       delete pPenRed;
       delete pPenGreen;
       delete pPenBlue;
       delete pPenBlack;
0 0
原创粉丝点击