上周开始把之前做的一个监控程序追加功能。
功能不难,其实主要就是
先取得数据,
界面显示,
然后启动监视线程,
有变化,更新之。
简单记录一下每一部分的实现方法。
取得数据:
先从一堆文件中,搜索需要的值,并把值相关的内容放入数组。这里需要一个动态数组。插入的时候自动排序,在内存中排序之后的数组即可在ListView中显示,并存成csv文件,再次取得数据优先从csv文件中读取,提高速度。
数据的存放方式为csv文件。本来想用CStdioFile,无奈CE下面没提供这个类,遂自己做了CCsvFile,主要功能跟CStdioFile一样,可以实现按行读写文件。读出来的东东为“0,abc,def,’中国人’”等等,再小分析一下字符串就OK了。
显示为ListView:
这个CListView需要在第三列,第四列画上Button,同时由于ListView中数据跟我的动态数组中的数据为映射关系,隧共享一份内存显示就好了。
在CListView中画Button花了点功夫。考虑到效率不想Create很多Button,决定自绘,做一个CListViewBtn,重载NM_CUSTOMDRAW,在里面DrawFrameControl。当然还要重载消息ON_WM_LBUTTONDOWN, ON_WM_LBUTTONUP。
共享内存部分很简单,InsertItem时候将LV_ITEM的pszText设置为LPSTR_TEXTCALLBACK,lParam指针指向要共享的内存数据,重载LVN_GETDISPINFO。咔咔两下就能解决问题。
启动线程:
使用MFC的CWinThread,AfxBeginThread启动一个ThreadFunc,在ThreadFunc中使用While循环检查设备值是否更改。
While循环
{
检查退出信号量
检查设备值是否更改,更改了:PostMessage
没更改:Looop
}
虽然是说起来如此简单的工作,还是花费了大概4天的时间去完成代码。