想要用MFC做一个实时显示网络流量的坐标图。
想问下应该用什么组件绘制呢?
最好能给出点小小的代码示例,谢谢~
想问下应该用什么组件绘制呢?
最好能给出点小小的代码示例,谢谢~
解决方案 »
- 请问有类似installshield的打包软件吗,但是要中文版的界面
- 在主框架上右键菜单的问题
- 现金求购声音引擎源码,效果一定要非常的好!!类似SKYPE或GOOGLE的语音通信软件?
- 问个特基础的问题....不要骂我
- 字体文件是否需要注册
- 请问谁有windowXP英文版的序列号,在线等待,急!!!
- 请问如何设计XP界面
- 时代中国网(http://times-china.51.net)精彩内容奉献,快去申请吧。
- 程序调试没有问题,执行不了,但是在debug底下又可以,什么原因阿?
- 不用MFC类CString,用ATL或STL或C++标准库函数去掉前尾空格!
- 用天敏USB视屏采集卡U100采集到的视屏是黑白的,并且闪烁,要变黑
- 谁能帮我调试视频会议?谢谢!!
用CDC的MoveTo,LineTo等函数就可以了,在OnPaint里面绘制
void CYourDlg::OnPaint()
{
CPaintDC dc(this);
dc.MoveTo(x1,y1);//起始
dc.MoveTo(x2,y2);//终点
------------//后面就类似了
}
CDC* dc;
CRect rect;
GetDlgItem(IDC_GLBSTDDZTN)->GetWindowRect(&rect);//GetWindowRect screen coordinates
dc=GetDlgItem(IDC_GLBSTDDZTN)->GetDC();//获得对话框上的picture的窗口句柄
UpdateData();//传递数据
CPen* oldpen;
CPen gridpen(PS_DASH,1,RGB(0,0,255));//网格笔
CPen pen(m_PenStyle,m_PenWidth, m_PenColor);//实线笔
oldpen=dc->SelectObject(&pen);
ScreenToClient(&rect);//把屏幕坐标转换为工作区坐标
CString labelX,labelY;
dc->SetBkMode(TRANSPARENT);//设置透明背景
dc->SetMapMode(MM_ISOTROPIC);
dc->SetMapMode(MM_LOENGLISH);
dc->SetViewportOrg(rect.left-m_blankleft,rect.bottom-m_blankbottom);//只更改坐标原点,不更改坐标轴方向和坐标单位,坐标单位是像素
dc->SetWindowExt(10,280);//用来计算老的或默认的坐标系中一个单位的长度,对应着“窗口”
dc->SetViewportExt(4400,-6800);//规定水平及垂直坐标轴的单位,对应着“视口” //已经进行过坐标转换,坐标原点为左下角
//绘制X轴
dc->MoveTo(rect.left+m_blankleft,0);//坐标原点
dc->LineTo(rect.right-m_blankright,0);
//绘制X轴箭头
dc->LineTo(rect.right-m_blankright-20,10);
dc->MoveTo(rect.right-m_blankright,0);
dc->LineTo(rect.right-m_blankright-20,-10);
//绘制Y轴
dc->MoveTo(rect.left+m_blankleft,0);//坐标原点
dc->LineTo(rect.left+m_blankleft,rect.Height()-m_blankbottom-m_blanktop-10);
//绘制Y轴箭头
dc->MoveTo(rect.left+m_blankleft,rect.Height()-m_blankbottom-m_blanktop-10);
dc->LineTo(rect.left+m_blankleft-10,rect.Height()-m_blankbottom-m_blanktop-30);
dc->MoveTo(rect.left+m_blankleft,rect.Height()-m_blankbottom-m_blanktop-10);
dc->LineTo(rect.left+m_blankleft+10,rect.Height()-m_blankbottom-m_blanktop-30);
dc->SelectObject(&oldpen);
dc->SelectObject(&gridpen);
//绘制X轴网格,纵线 绘制方向为从下至上,从左至右
m_GridStepX=(rect.Width()-m_blankleft-m_blankright)/m_GridCountX;
for (int i=1;i<m_GridCountX;i++)
{
labelX.Format("%5.2f",i*m_GridStepX);
dc->MoveTo(rect.left+m_blankleft+i*m_GridStepX,0);//纵线底部
dc->LineTo(rect.left+m_blankleft+i*m_GridStepX,rect.Height()-m_blankbottom-m_blanktop);//纵线顶部
dc->TextOut(rect.left+m_blankleft+i*m_GridStepX-20,-10,labelX);//X轴标签
}
//绘制Y轴网格,横线 绘制方向为从左至右,从上至下
//坐标X向右为正,Y向上为正
m_GridStepY=(rect.Height()-m_blanktop-m_blankbottom)/m_GridCountY;
for (int j=1;j<m_GridCountY;j++)
{
labelY.Format("%5.2f",(m_GridCountY-j)*m_GridStepY);
dc->MoveTo(rect.left+m_blankleft,rect.Height()-m_blanktop-m_blankbottom-j*m_GridStepY);
dc->LineTo(rect.Width()-m_blankright,rect.Height()-m_blanktop-m_blankbottom-j*m_GridStepY);
dc->TextOut(rect.left-10,rect.Height()-m_blanktop-m_blankbottom-j*m_GridStepY,labelY);//Y轴标签
}
dc->SelectObject(&oldpen);
CFont font1;
font1.CreateFont(35,6,0,0,FW_REGULAR,FALSE,FALSE,0,ANSI_CHARSET,OUT_STROKE_PRECIS,CLIP_DEFAULT_PRECIS,PROOF_QUALITY,FIXED_PITCH | FF_SWISS,"Arial");
CFont* def_font1=dc->SelectObject(&font1);
dc->SelectObject(def_font1);
const double PI=3.141592653589793238462643383279;
for (double k=0;k<500;k+=0.01)//k+=0.01
{
double j=rect.Height()/2+sin(PI/m_GridCountX+k)*m_GridCountY;
dc->SetPixel(rect.left+m_blankleft+k,j,RGB(255,0,0));
}
ReleaseDC(dc);