您好,登錄后才能下訂單哦!
經過幾天的學習,終于將點陣解析出來了,在這里總結一下,點陣的分布是一位Head,2位Length,一位Command,1217位Pargram,和2位checkNum,因此解析的時候只需要判斷1217位Pargram是不是Length的值就行了,頭是以0XAA開頭的,我們只要建立一個足夠大的數組存這1217位Pargram,unsigned char LatData[1216];//點陣數據(半屏),注意第一個字節為判斷上半屏或者下半屏,因此不存到這個數組里面,但是檢驗碼的時候需要把它加進去,這里完成后出現點陣分布很亂的局面,也就是顯示的并不是我要的點陣,經過檢查發現是我存的這個數組沒有初始化,還有一個原因是下半屏發的點陣中在內容里有0XAA,由于在判斷的時候沒有判斷好,導致只顯示了一半的內容,因此在判斷是不是點陣頭的時候要if(buf == 0XAA && m_index ==0),這樣點陣就解析完了。得到點陣解析的數據后將它放到一個結構體中,確定上半屏和下半屏的點陣數據都存放到這個結構體后,再將這個結構體存放到一個隊列中,接下來就要顯示點陣了,這里我們定義一個定時器,然后讓他顯示點陣,由于點陣半屏內容有1216*8= 9728個點,利用x=i%256;得到X軸的坐標,y=i/256;得到y軸的坐標,然后在點為1的地方畫::SetPixel(Latdc,x,y,RGB(0,255,255));這里只能畫256*76個點,因此我們要放大,利用TransparentBlt函數就能達到這個效果。這樣點陣就顯示完成了。而在我們的車載上有三種狀態,Radio、CD和Aux,我們點擊這幾個按鈕,從button中發送指定的十六進制命令給Can,寫入Can后,由于之前在Can中有一個線程在不停的讀串口中的數據,并且分析和解析數據,這樣就能解析出我發送的字符了,在這里有個問題就是我的showWindow經常會出現不可思議的問題,我讓他SW_SHOW或者SW_HIDE都沒有反應。
showWindow問題終于解決了,為什么經常Window顯示不出來的原因是在對窗口初始化的時候我用的是MoveWindow(0, 0, 800, 480);,而在這里我必須要用::SetWindowPos(this->m_hWnd,HWND_TOPMOST,0,0,800,480,SWP_HIDEWINDOW);這兩個的區別是:
MoveWindow只能設置窗口的大小和位置;SetWindowPos擁有MoveWindow的全部功能之外,還可以設置窗口的層疊關系(如,把指定的窗口放在所有窗口的最上層--alwaysontop就可以用這個函數、或者把指定的窗口放在另一個窗口的下層,等等)。你完全可以不用MoveWindow,而只用SetWindowPos;但是,在只要設置窗口大小或位置的情況下,你也完全可以使用MoveWindow。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。