你好,本人要在对话框上绘制三个坐标轴,显示串口数据,每个坐标轴只显示一条动态曲线,高手帮帮忙啊MFC坐标轴

解决方案 »

  1.   

    最近我也写了一个关于坐标轴的 这是坐标轴作图部分 
    void CzzzDlg::OnPaint()
    {
    if (IsIconic())
    {
    CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
    int cxIcon = GetSystemMetrics(SM_CXICON);
    int cyIcon = GetSystemMetrics(SM_CYICON);
    CRect rect;
    GetClientRect(&rect);
    int x = (rect.Width() - cxIcon + 1) / 2;
    int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
    dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
    CDialog::OnPaint();
    }
    CPaintDC dc(this);//device context for painting
    CString str;
    int i;
    pWnd->Invalidate();//强制更新绘图,不可少,否则绘图会出错,使static控件区域无效
    pWnd->UpdateWindow();//更新窗口,此时才真正向系统发送重绘消息
    CDC *pDC=pWnd->GetDC();//获取控件的cdc指针
    pDC->Rectangle(0,0,700,500);//画一个矩形框
    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,450);//竖起轴
    pDC->LineTo(650,450);//水平轴 //写x轴刻度值
    for(i=0;i<=600;i+=60)
    {
    str.Format(_T("%d"),i);
    pDC->TextOut(i,460,str);
    //绘制x轴刻度
    pDC->MoveTo(i+20,450);
    pDC->LineTo(i+20,445);
    }
    //写y轴刻度值
       for(i=400;i<=4000;i+=400)
       {
       str.Format(_T("%d"),i);
       pDC->TextOut(0,450-0.1*i-10,str);
    //绘制Y轴刻度
       pDC->MoveTo(25,450-0.1*i);
       pDC->LineTo(20,450-0.1*i);
       }
       //绘制X箭头
       pDC->MoveTo(640,445);
       pDC->LineTo(650,450);
       pDC->LineTo(640,455);
       //绘制Y箭头
       pDC->MoveTo(15,25);
       pDC->LineTo(20,20);
       pDC->LineTo (25,25);
       //恢复之前的画笔
       pDC->SelectObject(pOldPen);
       delete pPenRed;
       if(pPen!=NULL)
       delete pPen;
       ReleaseDC(pDC);
    }