打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
在对话框中绘制直角坐标系
有时为了对采集数据进行显示, 需要在界面中显示直角坐标, 主要操作均在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);
   }
 
效果见下图(因为以前做过相关的东西, 就直接贴出来了, 并没有单独的图片, 看下效果就可以):
            
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
静态文本控件制图
CWnd,HWnd,CDC,HDC的关系
CDC::TabbedTextOut
MFC中简单绘图几种方式
简单的MFC画正弦曲线
CClientDC?和?CDC?的区别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服