权少的挚爱娇宠第一章:在对话框中绘制直角坐标系

来源:百度文库 编辑:中财网 时间:2024/05/05 04:05:09
有时为了对采集数据进行显示, 需要在界面中显示直角坐标, 主要操作均在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);   } 效果见下图(因为以前做过相关的东西, 就直接贴出来了, 并没有单独的图片, 看下效果就可以):