如题,现在要编写两个程序:
1. X-Y坐标图,并能随意在触摸屏上绘图,不知有这方面的例程吗?请大大们给偶新手点建议~
2. 一个数据库程序,没学过数据库,请大大们推荐一个好入门的,而且支持WINCE~
3. 以上图表和数据库最终实现互通,也就是说,现场绘图的数据要能够导入数据库中,而数据库中的数据必要时也能到如图表(拿来直接用)~
在此先谢过了,偶主要是没经验~
10 个解决方案
#1
绘图肯定没有问题,注意绘制实现过程,最好使用双缓冲。
数据库,CE本身的,或sqlite、sql ce都可以
数据库,CE本身的,或sqlite、sql ce都可以
#2
关于绘图能说的详细点吗?我练习过简单的类似画图板的绘图程序,不知这种图表需要哪些步骤~谢了!
#3
简单点就是二维图,描点把点连起来,保存到数据库中,要显示可以到数据库去取数据,使用双缓冲可以避免绘图闪烁的问题
#4
图表的例子网上很好找吧,csdn也有。。
#5
多谢上面各位,我先尝试一下~
#6
我也来试试
#7
做好了记得来交流一下啊~
#8
用VS2005 “C++ 智能设备”编程,现在实现了:
1. 在指定窗口范围内绘图,坐标系可以直接在OnDraw里编程;
2. 可以使用两种元素绘图:直线、曲线,两种颜色:红色、黑色。
现在的问题是:
1. 怎样保存用触摸笔绘制曲线上的各点坐标?
2. 选择什么数据库,CE自带的?好用吗?
3. 怎样实现坐标数据与数据库的互通?
恳请大大们指点!!!
附:
// Ccurve3View 消息处理程序
void Ccurve3View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(Frect.PtInRect(point))
{
m_FirstPoint=point;
SetCapture();
}
}
void Ccurve3View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(this==GetCapture())
ReleaseCapture(); //停止捕捉鼠标信息
//确保有一个元素,并添加到文档中
if(m_pTempElement)
{
GetDocument()->AddElement(m_pTempElement);
InvalidateRect(0); //重新绘制当前窗口
m_pTempElement=0; //复位元素指针
}
}
void Ccurve3View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//定义设备显示全局环境
CClientDC aDC(this);
aDC.SetROP2(R2_NOTXORPEN); //设定绘图模式
if((nFlags & MK_LBUTTON) && (this==GetCapture()) && Frect.PtInRect(point))
{
m_SecondPoint=point;
if(m_pTempElement)
{
if(CURVE == GetDocument()->GetElementType()) //是否为曲线
{
//正在绘制曲线,故要为曲线增加新线段
static_cast<CCurve*>(m_pTempElement)->AddSegment(m_SecondPoint);
m_pTempElement->Draw(&aDC); //现在正式绘制
return; //已完成
}
aDC.SetROP2(R2_NOTXORPEN); //设置绘图模式
//若先前有鼠标移动,则删除旧元素
m_pTempElement->Draw(&aDC);
delete m_pTempElement; //删除旧元素
m_pTempElement=0; //指针复位到0
}
//按文档记录的类型和颜色创建新元素并作图
m_pTempElement=CreateElement(); //创建新元素
m_pTempElement->Draw(&aDC); //绘制该元素
}
}
1. 在指定窗口范围内绘图,坐标系可以直接在OnDraw里编程;
2. 可以使用两种元素绘图:直线、曲线,两种颜色:红色、黑色。
现在的问题是:
1. 怎样保存用触摸笔绘制曲线上的各点坐标?
2. 选择什么数据库,CE自带的?好用吗?
3. 怎样实现坐标数据与数据库的互通?
恳请大大们指点!!!
附:
// Ccurve3View 消息处理程序
void Ccurve3View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(Frect.PtInRect(point))
{
m_FirstPoint=point;
SetCapture();
}
}
void Ccurve3View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(this==GetCapture())
ReleaseCapture(); //停止捕捉鼠标信息
//确保有一个元素,并添加到文档中
if(m_pTempElement)
{
GetDocument()->AddElement(m_pTempElement);
InvalidateRect(0); //重新绘制当前窗口
m_pTempElement=0; //复位元素指针
}
}
void Ccurve3View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//定义设备显示全局环境
CClientDC aDC(this);
aDC.SetROP2(R2_NOTXORPEN); //设定绘图模式
if((nFlags & MK_LBUTTON) && (this==GetCapture()) && Frect.PtInRect(point))
{
m_SecondPoint=point;
if(m_pTempElement)
{
if(CURVE == GetDocument()->GetElementType()) //是否为曲线
{
//正在绘制曲线,故要为曲线增加新线段
static_cast<CCurve*>(m_pTempElement)->AddSegment(m_SecondPoint);
m_pTempElement->Draw(&aDC); //现在正式绘制
return; //已完成
}
aDC.SetROP2(R2_NOTXORPEN); //设置绘图模式
//若先前有鼠标移动,则删除旧元素
m_pTempElement->Draw(&aDC);
delete m_pTempElement; //删除旧元素
m_pTempElement=0; //指针复位到0
}
//按文档记录的类型和颜色创建新元素并作图
m_pTempElement=CreateElement(); //创建新元素
m_pTempElement->Draw(&aDC); //绘制该元素
}
}
#9
呼呼,终于实现了以上功能,下面总结一下:
1. 编写了一个单文档智能设备MFC程序显示温度数据X-Y坐标方格,并能使用触摸笔或鼠标在方格范围内绘制任意曲线或直线;
2. 实现该程序文档的创建和保存,通过串行化实现;
3. 学习了SQLite数据库,以菜单打开对话框的形式将数据库嵌入到以上程序中;
4. 实现绘制曲线或直线时能实时地将坐标转化为温度数据导入到数据库(创建全局数组,分别在OnLButtonDown和OnMouseMove中将得到的坐标保存到数组中,然后在数据库对话框文件中从数组导入数据),并实现数据库的清空和查询;
5. 实现将以上得到的温度数据备份到文档并保存(在C*Doc类中定义与上面全局数组一致的成员数组,备份时将数据导入成员数组就可以串行化保存了,全局数组未能实现串行化),以后再打开文件可实时导入数据库进行操作。至此实现绘图与数据库的动态互通。
最后推荐一本书:《Visual C++ 2005 入门经典》,这本书对我帮助真的很大!
1. 编写了一个单文档智能设备MFC程序显示温度数据X-Y坐标方格,并能使用触摸笔或鼠标在方格范围内绘制任意曲线或直线;
2. 实现该程序文档的创建和保存,通过串行化实现;
3. 学习了SQLite数据库,以菜单打开对话框的形式将数据库嵌入到以上程序中;
4. 实现绘制曲线或直线时能实时地将坐标转化为温度数据导入到数据库(创建全局数组,分别在OnLButtonDown和OnMouseMove中将得到的坐标保存到数组中,然后在数据库对话框文件中从数组导入数据),并实现数据库的清空和查询;
5. 实现将以上得到的温度数据备份到文档并保存(在C*Doc类中定义与上面全局数组一致的成员数组,备份时将数据导入成员数组就可以串行化保存了,全局数组未能实现串行化),以后再打开文件可实时导入数据库进行操作。至此实现绘图与数据库的动态互通。
最后推荐一本书:《Visual C++ 2005 入门经典》,这本书对我帮助真的很大!
#10
谢谢楼主分享 :)
#1
绘图肯定没有问题,注意绘制实现过程,最好使用双缓冲。
数据库,CE本身的,或sqlite、sql ce都可以
数据库,CE本身的,或sqlite、sql ce都可以
#2
关于绘图能说的详细点吗?我练习过简单的类似画图板的绘图程序,不知这种图表需要哪些步骤~谢了!
#3
简单点就是二维图,描点把点连起来,保存到数据库中,要显示可以到数据库去取数据,使用双缓冲可以避免绘图闪烁的问题
#4
图表的例子网上很好找吧,csdn也有。。
#5
多谢上面各位,我先尝试一下~
#6
我也来试试
#7
做好了记得来交流一下啊~
#8
用VS2005 “C++ 智能设备”编程,现在实现了:
1. 在指定窗口范围内绘图,坐标系可以直接在OnDraw里编程;
2. 可以使用两种元素绘图:直线、曲线,两种颜色:红色、黑色。
现在的问题是:
1. 怎样保存用触摸笔绘制曲线上的各点坐标?
2. 选择什么数据库,CE自带的?好用吗?
3. 怎样实现坐标数据与数据库的互通?
恳请大大们指点!!!
附:
// Ccurve3View 消息处理程序
void Ccurve3View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(Frect.PtInRect(point))
{
m_FirstPoint=point;
SetCapture();
}
}
void Ccurve3View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(this==GetCapture())
ReleaseCapture(); //停止捕捉鼠标信息
//确保有一个元素,并添加到文档中
if(m_pTempElement)
{
GetDocument()->AddElement(m_pTempElement);
InvalidateRect(0); //重新绘制当前窗口
m_pTempElement=0; //复位元素指针
}
}
void Ccurve3View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//定义设备显示全局环境
CClientDC aDC(this);
aDC.SetROP2(R2_NOTXORPEN); //设定绘图模式
if((nFlags & MK_LBUTTON) && (this==GetCapture()) && Frect.PtInRect(point))
{
m_SecondPoint=point;
if(m_pTempElement)
{
if(CURVE == GetDocument()->GetElementType()) //是否为曲线
{
//正在绘制曲线,故要为曲线增加新线段
static_cast<CCurve*>(m_pTempElement)->AddSegment(m_SecondPoint);
m_pTempElement->Draw(&aDC); //现在正式绘制
return; //已完成
}
aDC.SetROP2(R2_NOTXORPEN); //设置绘图模式
//若先前有鼠标移动,则删除旧元素
m_pTempElement->Draw(&aDC);
delete m_pTempElement; //删除旧元素
m_pTempElement=0; //指针复位到0
}
//按文档记录的类型和颜色创建新元素并作图
m_pTempElement=CreateElement(); //创建新元素
m_pTempElement->Draw(&aDC); //绘制该元素
}
}
1. 在指定窗口范围内绘图,坐标系可以直接在OnDraw里编程;
2. 可以使用两种元素绘图:直线、曲线,两种颜色:红色、黑色。
现在的问题是:
1. 怎样保存用触摸笔绘制曲线上的各点坐标?
2. 选择什么数据库,CE自带的?好用吗?
3. 怎样实现坐标数据与数据库的互通?
恳请大大们指点!!!
附:
// Ccurve3View 消息处理程序
void Ccurve3View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(Frect.PtInRect(point))
{
m_FirstPoint=point;
SetCapture();
}
}
void Ccurve3View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(this==GetCapture())
ReleaseCapture(); //停止捕捉鼠标信息
//确保有一个元素,并添加到文档中
if(m_pTempElement)
{
GetDocument()->AddElement(m_pTempElement);
InvalidateRect(0); //重新绘制当前窗口
m_pTempElement=0; //复位元素指针
}
}
void Ccurve3View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//定义设备显示全局环境
CClientDC aDC(this);
aDC.SetROP2(R2_NOTXORPEN); //设定绘图模式
if((nFlags & MK_LBUTTON) && (this==GetCapture()) && Frect.PtInRect(point))
{
m_SecondPoint=point;
if(m_pTempElement)
{
if(CURVE == GetDocument()->GetElementType()) //是否为曲线
{
//正在绘制曲线,故要为曲线增加新线段
static_cast<CCurve*>(m_pTempElement)->AddSegment(m_SecondPoint);
m_pTempElement->Draw(&aDC); //现在正式绘制
return; //已完成
}
aDC.SetROP2(R2_NOTXORPEN); //设置绘图模式
//若先前有鼠标移动,则删除旧元素
m_pTempElement->Draw(&aDC);
delete m_pTempElement; //删除旧元素
m_pTempElement=0; //指针复位到0
}
//按文档记录的类型和颜色创建新元素并作图
m_pTempElement=CreateElement(); //创建新元素
m_pTempElement->Draw(&aDC); //绘制该元素
}
}
#9
呼呼,终于实现了以上功能,下面总结一下:
1. 编写了一个单文档智能设备MFC程序显示温度数据X-Y坐标方格,并能使用触摸笔或鼠标在方格范围内绘制任意曲线或直线;
2. 实现该程序文档的创建和保存,通过串行化实现;
3. 学习了SQLite数据库,以菜单打开对话框的形式将数据库嵌入到以上程序中;
4. 实现绘制曲线或直线时能实时地将坐标转化为温度数据导入到数据库(创建全局数组,分别在OnLButtonDown和OnMouseMove中将得到的坐标保存到数组中,然后在数据库对话框文件中从数组导入数据),并实现数据库的清空和查询;
5. 实现将以上得到的温度数据备份到文档并保存(在C*Doc类中定义与上面全局数组一致的成员数组,备份时将数据导入成员数组就可以串行化保存了,全局数组未能实现串行化),以后再打开文件可实时导入数据库进行操作。至此实现绘图与数据库的动态互通。
最后推荐一本书:《Visual C++ 2005 入门经典》,这本书对我帮助真的很大!
1. 编写了一个单文档智能设备MFC程序显示温度数据X-Y坐标方格,并能使用触摸笔或鼠标在方格范围内绘制任意曲线或直线;
2. 实现该程序文档的创建和保存,通过串行化实现;
3. 学习了SQLite数据库,以菜单打开对话框的形式将数据库嵌入到以上程序中;
4. 实现绘制曲线或直线时能实时地将坐标转化为温度数据导入到数据库(创建全局数组,分别在OnLButtonDown和OnMouseMove中将得到的坐标保存到数组中,然后在数据库对话框文件中从数组导入数据),并实现数据库的清空和查询;
5. 实现将以上得到的温度数据备份到文档并保存(在C*Doc类中定义与上面全局数组一致的成员数组,备份时将数据导入成员数组就可以串行化保存了,全局数组未能实现串行化),以后再打开文件可实时导入数据库进行操作。至此实现绘图与数据库的动态互通。
最后推荐一本书:《Visual C++ 2005 入门经典》,这本书对我帮助真的很大!
#10
谢谢楼主分享 :)