vc 坐标系统与影射模式

来源:互联网 发布:mac 搭建vps 编辑:程序博客网 时间:2024/05/17 05:14

 //坐标系统与影射模式
 
 通过自定义映射模式 ,将客户窗口映射为 一个平面直角坐标系,即原点在客户区中心,
 原点向左为 x轴负方向,原点向上为y轴正方向。在客户窗口绘制一条正弦曲线,幅度为客户区高度的一半,
 显示 4个周期
 //设置映射模式为 MM_ANISOTROPIC
 pDC->SetMapMode(MM_ANISOTROPIC);

 //设置窗口左上角坐标(-4*pi,2),放大1000倍,下同
 pDC->SetWindowOrg(int(-4000*3.14), 2000);
 //设置窗口度量--总大小
 pDC->SetWindowExt(int (8000*3.14), -4000);
 //获得客户区矩形
 CRect rc;
 GetClientRect(rc);
 //设置视口左上角坐标
 pDC->SetViewportOrg(0, 0);
 //设置视口度量
 pDC->SetViewportExt(rc.Width(), rc.Height());
 //创建蓝色实线画画笔
 CPen pen(PS_SOLID, 1, RGB(0, 0, 255)), pen1(PS_DASH, 1, RGB(128, 0, 0)),*pOldPen;
 pOldPen = pDC->SelectObject(&pen);
 pDC->MoveTo(int(-4000*3.14), 0);
 for(double x = (-4*3.14); x <=0; x += 0.01)
 {
  pDC->LineTo(int (1000*x),int(1000*sin(x)));
 }
 for(x = 0; x <= 4*3.14; x += 0.01)
 {
  pDC->LineTo(int (1000*x), int (1000*sin(x)));
 }

 pDC->SelectObject(&pen1);
 pDC->MoveTo(int(-4000*3.14), 0);
 pDC->LineTo(int (4000*3.14), 0);
 pDC->MoveTo(0, -2000);
 pDC->LineTo(0, 2000);
 //恢复设备上下文原有画笔
 pDC->SelectObject(pOldPen);
 pen.DeleteObject();
 pen1.DeleteObject();