上周開(kāi)始把之前做的一個(gè)監(jiān)控程序追加功能。
功能不難,其實(shí)主要就是
先取得數(shù)據(jù),
界面顯示,
然后啟動(dòng)監(jiān)視線程,
有變化,更新之。
簡(jiǎn)單記錄一下每一部分的實(shí)現(xiàn)方法。
取得數(shù)據(jù):
先從一堆文件中,搜索需要的值,并把值相關(guān)的內(nèi)容放入數(shù)組。這里需要一個(gè)動(dòng)態(tài)數(shù)組。插入的時(shí)候自動(dòng)排序,在內(nèi)存中排序之后的數(shù)組即可在ListView中顯示,并存成csv文件,再次取得數(shù)據(jù)優(yōu)先從csv文件中讀取,提高速度。
數(shù)據(jù)的存放方式為csv文件。本來(lái)想用CStdioFile,無(wú)奈CE下面沒(méi)提供這個(gè)類,遂自己做了CCsvFile,主要功能跟CStdioFile一樣,可以實(shí)現(xiàn)按行讀寫文件。讀出來(lái)的東東為“0,abc,def,’中國(guó)人’”等等,再小分析一下字符串就OK了。
顯示為ListView:
這個(gè)CListView需要在第三列,第四列畫(huà)上Button,同時(shí)由于ListView中數(shù)據(jù)跟我的動(dòng)態(tài)數(shù)組中的數(shù)據(jù)為映射關(guān)系,隧共享一份內(nèi)存顯示就好了。
在CListView中畫(huà)Button花了點(diǎn)功夫。考慮到效率不想Create很多Button,決定自繪,做一個(gè)CListViewBtn,重載NM_CUSTOMDRAW,在里面DrawFrameControl。當(dāng)然還要重載消息ON_WM_LBUTTONDOWN, ON_WM_LBUTTONUP。
共享內(nèi)存部分很簡(jiǎn)單,InsertItem時(shí)候?qū)?/span>LV_ITEM的pszText設(shè)置為LPSTR_TEXTCALLBACK,lParam指針指向要共享的內(nèi)存數(shù)據(jù),重載LVN_GETDISPINFO。咔咔兩下就能解決問(wèn)題。
啟動(dòng)線程:
使用MFC的CWinThread,AfxBeginThread啟動(dòng)一個(gè)ThreadFunc,在ThreadFunc中使用While循環(huán)檢查設(shè)備值是否更改。
While循環(huán)
{
檢查退出信號(hào)量
檢查設(shè)備值是否更改,更改了:PostMessage
沒(méi)更改:Looop
}
雖然是說(shuō)起來(lái)如此簡(jiǎn)單的工作,還是花費(fèi)了大概4天的時(shí)間去完成代碼。