最近老板叫帮他们做个项目,可能是我们是嵌入式实验室,会用vc的人太少了,所以尽管我也不太会,老板还是把任务交给我了,哎,没办法,赶鸭子上架啊。最后总算还是做出来了,下面把项目的心得写写。
该项目主要是将采集到的数据从串口上传到PC机,在PC机上把数据解析,并且以表格和曲线形式显示出来。
串口遇到的主要问题:
1。以二进制读取,接受的数据中0x00都给丢弃了。
解答:
这个问题主要是由于所用的ActiveX控件MSCOMM的右键--属性--(硬件)或者(全部)设置中选择了 NullDiscard所致
曲线显示遇到的主要问题:
1。采用双缓冲绘图,并且在ONPAINT中也做了处理,但是当图形最大化或者最小化时候,图象仍然消失
解答:
在处理之前加上下面语句就可以了。我的程序是对IDC_EDIT1做的处理。
CWnd* pWnd =GetDlgItem(IDC_EDIT1);
pWnd->UpdateWindow();
//添加重绘的内容
2。在内存中绘图,选择有颜色的画笔后,绘出的图形仍然没有颜色
解答:
CBitmap *pOldBitmap = NULL;
dcMem6.CreateCompatibleDC(NULL);
m_bmpBuf.DeleteObject();
CRect rect;
CWnd* pWnd =GetDlgItem(IDC_EDIT1);
CDC *pDC;
pDC = pWnd->GetDC();
m_bmpBuf.CreateCompatibleBitmap(pDC,8080,500);
//之前用的m_bmpBuf.CreateCompatibleBitmap(m_bmpBuf,8080,500);
pOldBitmap = dcMem6.SelectObject(&m_bmpBuf);
小知识:
1。声明全局变量:可以用下面的方法
在stdafx.c中定义
在stdafx.h中用extern声明,如果在定义中有初始值,在声明中不要该初始值。
2。弹出窗口前先将窗口的头文件加在要弹出窗口的文件中
3。vc++6.0中for(int i;i<10;i++){....}定义的变量i的范围并不仅仅在{....}中
4。要声明一个类,并不仅仅把它的头文件包含进来就可以,而且要包含那些类的.cpp文件中所包含的头文件
5。vc中创建CFORMVIEW类型SDI,比如说名字叫CMyView,我们在CMainFrame中的控件如何对CMyView中的控件操作呢 ?这里介绍2种方法:
1:在CMyView中建立一个函数,在该函数中对本类的控件进行操作,用GetDlgItem(ID)可以得到控件的CWnd指针
2:不建立函数,在CMainFrame中获得指向CMyView的指针后,再进行上一步中的操作
在CMainFrame中获得CMyView对象的指针的方法:
CMyView* pView;
pView=(CMyView*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView();
该项目主要是将采集到的数据从串口上传到PC机,在PC机上把数据解析,并且以表格和曲线形式显示出来。
串口遇到的主要问题:
1。以二进制读取,接受的数据中0x00都给丢弃了。
解答:
这个问题主要是由于所用的ActiveX控件MSCOMM的右键--属性--(硬件)或者(全部)设置中选择了 NullDiscard所致
曲线显示遇到的主要问题:
1。采用双缓冲绘图,并且在ONPAINT中也做了处理,但是当图形最大化或者最小化时候,图象仍然消失
解答:
在处理之前加上下面语句就可以了。我的程序是对IDC_EDIT1做的处理。
CWnd* pWnd =GetDlgItem(IDC_EDIT1);
pWnd->UpdateWindow();
//添加重绘的内容
2。在内存中绘图,选择有颜色的画笔后,绘出的图形仍然没有颜色
解答:
CBitmap *pOldBitmap = NULL;
dcMem6.CreateCompatibleDC(NULL);
m_bmpBuf.DeleteObject();
CRect rect;
CWnd* pWnd =GetDlgItem(IDC_EDIT1);
CDC *pDC;
pDC = pWnd->GetDC();
m_bmpBuf.CreateCompatibleBitmap(pDC,8080,500);
//之前用的m_bmpBuf.CreateCompatibleBitmap(m_bmpBuf,8080,500);
pOldBitmap = dcMem6.SelectObject(&m_bmpBuf);
小知识:
1。声明全局变量:可以用下面的方法
在stdafx.c中定义
在stdafx.h中用extern声明,如果在定义中有初始值,在声明中不要该初始值。
2。弹出窗口前先将窗口的头文件加在要弹出窗口的文件中
3。vc++6.0中for(int i;i<10;i++){....}定义的变量i的范围并不仅仅在{....}中
4。要声明一个类,并不仅仅把它的头文件包含进来就可以,而且要包含那些类的.cpp文件中所包含的头文件
5。vc中创建CFORMVIEW类型SDI,比如说名字叫CMyView,我们在CMainFrame中的控件如何对CMyView中的控件操作呢 ?这里介绍2种方法:
1:在CMyView中建立一个函数,在该函数中对本类的控件进行操作,用GetDlgItem(ID)可以得到控件的CWnd指针
2:不建立函数,在CMainFrame中获得指向CMyView的指针后,再进行上一步中的操作
在CMainFrame中获得CMyView对象的指针的方法:
CMyView* pView;
pView=(CMyView*)((CFrameWnd*)AfxGetApp()->m_pMainWnd)->GetActiveView();