分享

在对话框中绘制直角坐标系

 树梢上的一线阳光 2011-02-26
有时为了对采集数据进行显示, 需要在界面中显示直角坐标, 主要操作均在OnPaint函数中完成, 下面就简单的讲解下如何实现:
   1. 添加static静态文本框到对话框上, 并修改其ID为IDC_MYSTATIC;
   2. 在对话框的申明文件即CXXXDlg.h文件中定义变量;
   CWnd *pWnd; //获取控件窗口类指针
   3. 在其cpp实现文件中的OnInitDialog()函数中获取:
   pWnd = GetDlgItem(IDC_MYSTATIC);
   4. 在OnPaint()中的代码如下:
void CXXXDlg::OnPaint()
{
   CPaintDC dc(this); // device context for painting
   CString str;
   int i, j;
   int x, y;
   //强制更新绘图, 不可少, 否则绘图会出错
   pWnd->Invalidate(); //使static控件的区域无效
   pWnd->UpdateWindow();//更新窗口, 此时才真正向系统发送重绘消息
   CDC *pDC = pWnd->GetDC(); //获取控件的CDC指针
   pDC->Rectangle(0, 0, 380, 390); //画一个矩形框
   CPen *pPenRed = new CPen(); //创建画笔对象
   pPenRed ->CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); //红色画笔
   CPen *pPen = NULL;
   //选中当前红色画笔,并保存以前的画笔
   CGdiObject *pOldPen = pDC ->SelectObject(pPenRed);
   pDC ->MoveTo(20, 20); //绘制坐标轴
   pDC ->LineTo(20, 360); //竖起轴
   pDC ->LineTo(360, 360); //水平轴
   //写X轴刻度值
   for(i = 0; i <= 10; i ++)
   {
      str.Format("%d", i);
      pDC ->TextOut(17 + 30 * i, 365, str);
      //绘制X轴刻度
      pDC ->MoveTo(i * 30 + 20, 360);
      pDC ->LineTo(i * 30 + 20, 355);
   }

   //写Y轴刻度值
   for(i = 1; i <= 10; i ++)
   {
      str.Format("%d", i);
      pDC ->TextOut(2, 360 - 30 * i - 5, str);
      //绘制Y轴刻度
      pDC ->MoveTo(25, 360 - 30 * i);
      pDC ->LineTo(20, 360 - 30 * i);
     }
   //绘制X箭头
   pDC ->MoveTo(350, 357);
   pDC ->LineTo(360, 360);
   pDC ->LineTo(350, 363);
   //绘制Y箭头
   pDC ->MoveTo(17, 30);
   pDC ->LineTo(20, 20); //绘制左边箭头
   pDC ->LineTo(23, 30); //绘制右边箭头

   //恢复以前的画笔
   pDC ->SelectObject(pOldPen);
   delete pPenRed;
   if(pPen != NULL)
   delete pPen;
   ReleaseDC(pDC);
   }
 
效果见下图(因为以前做过相关的东西, 就直接贴出来了, 并没有单独的图片, 看下效果就可以):
            VC6.0中在对话框中绘制直角坐标 - 博云 - 博云的博客

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多