50分求助,在一个文本框里面绘制坐标系,在坐标系里面绘制轨迹图形显示数据的变化 在VC里面建立一个文本框,首先在这个文本框里面建立一个有X,Y轴的坐标系,当从外部读入(X,Y)的数值的时候,在坐标系里面可以将这些数值绘制成一条轨迹,显示(X,Y)坐标的变化。比如说(X,Y)是函数y=sinx的值,那么就是绘制一个SIN曲线。数据点要密集一点。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以参看我的博客http://blog.csdn.net/zgl7903/archive/2009/09/06/4524856.aspx 在文本框中?你用SDI的吗?画在View里面好了呀 文本框不好处理,用CStatic比较好........... //建一个CMyEdit类(用classwizard -》add class 》基类CEdit),把你的“文本框”改为:CMyEdit 文本框;//在你的dlg。h中。这样在CMyEdit 的OnPaint中就可以绘图了。绘图用到几个函数:MoveTo(),LineTo(),SetPixel()y=sinx 重载DRAWITEM函数,想画什么就画什么。 // 例子:// CMyEdit message handlers#define GridHeight 20#define GridStartX 40#define GridStartY 10// this edit has been disabled !void CMyEdit::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here// Erase back ground CRect rect; GetClientRect(&rect); dc.FillSolidRect(&rect,RGB(255,255,128));//a bit yellow// int i; int GridWidth;// for unit CString xUnit("0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0") ; CString yUnit; CFont *pFont=new CFont; pFont->CreatePointFont(100,"Small System");// 80=8 point CFont *oldFont=dc.SelectObject(pFont); CSize size=dc.GetTextExtent("0.0 ",4); GridWidth=size.cx;// Vert | for (i=0;i<=10;i++) { dc.MoveTo(GridStartX+GridWidth*i,GridStartY); dc.LineTo(GridStartX+GridWidth*i,GridStartY+GridHeight*10); }// Hori - for (i=0;i<=10;i++) { dc.MoveTo(GridStartX,GridStartY+GridHeight*i); dc.LineTo(GridStartX+GridWidth*10,GridStartY+GridHeight*i); yUnit.Format("%2.1f",1.0-i/10.0); dc.TextOut(5,GridStartY-size.cy/2+GridHeight*i,yUnit); } dc.TextOut(GridStartX-GridWidth/3,GridStartY+size.cy/2+GridHeight*10,xUnit);// double zheta; double pi=3.1415926535897932384626433832795; double sigma; for(zheta=0;zheta<=1.0;zheta+=0.001) { sigma=exp(-pi*zheta/sqrt(1-zheta*zheta))*GridHeight*10.0; dc.SetPixel((int)(GridStartX+zheta*10*GridWidth), (int)((GridStartY+10*GridHeight)-sigma), RGB(255,0,0));//red }// dc.SelectObject(oldFont); DeleteObject(pFont); delete pFont;} 请问三维仿真软件如何用VC实现?例如,仿真吊车的起吊过程?基本思路 怎么实现托盘程序? 如何设置edit控件中的字体 组合框问题 --高手求教 子线程调用主窗口的UpdateData遇到一些问题 如何让鼠标单击CListCtrl时,不要选中任何选项 带洞多边形及多边形重叠的显示问题 Web页面中的ActiveX控件怎样知道浏览器是中文还是英文环境的呢? tab control的用法 有個問題解決不了,請人指點. pThreadState和m_pCurrentWinThread指针? 浏览目录对话框,选择目录,然后在目录下新建文件,如何避免选择光驱等非法的目录????
http://blog.csdn.net/zgl7903/archive/2009/09/06/4524856.aspx
你用SDI的吗?画在View里面好了呀
CMyEdit 文本框;//在你的dlg。h中。
这样在CMyEdit 的OnPaint中就可以绘图了。
绘图用到几个函数:
MoveTo(),LineTo(),SetPixel()y=sinx
// CMyEdit message handlers
#define GridHeight 20
#define GridStartX 40
#define GridStartY 10
// this edit has been disabled !
void CMyEdit::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Erase back ground
CRect rect;
GetClientRect(&rect);
dc.FillSolidRect(&rect,RGB(255,255,128));//a bit yellow
//
int i;
int GridWidth;
// for unit
CString xUnit("0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0") ;
CString yUnit;
CFont *pFont=new CFont;
pFont->CreatePointFont(100,"Small System");// 80=8 point
CFont *oldFont=dc.SelectObject(pFont);
CSize size=dc.GetTextExtent("0.0 ",4);
GridWidth=size.cx;
// Vert |
for (i=0;i<=10;i++)
{
dc.MoveTo(GridStartX+GridWidth*i,GridStartY);
dc.LineTo(GridStartX+GridWidth*i,GridStartY+GridHeight*10);
}
// Hori -
for (i=0;i<=10;i++)
{
dc.MoveTo(GridStartX,GridStartY+GridHeight*i);
dc.LineTo(GridStartX+GridWidth*10,GridStartY+GridHeight*i);
yUnit.Format("%2.1f",1.0-i/10.0);
dc.TextOut(5,GridStartY-size.cy/2+GridHeight*i,yUnit);
}
dc.TextOut(GridStartX-GridWidth/3,GridStartY+size.cy/2+GridHeight*10,xUnit);
//
double zheta;
double pi=3.1415926535897932384626433832795;
double sigma;
for(zheta=0;zheta<=1.0;zheta+=0.001)
{
sigma=exp(-pi*zheta/sqrt(1-zheta*zheta))*GridHeight*10.0;
dc.SetPixel((int)(GridStartX+zheta*10*GridWidth),
(int)((GridStartY+10*GridHeight)-sigma),
RGB(255,0,0));//red
}
//
dc.SelectObject(oldFont);
DeleteObject(pFont);
delete pFont;
}