通信协议之点阵的解析和showWindow问题的解决

来源:互联网 发布:mysql for windows 10 编辑:程序博客网 时间:2024/05/17 07:16

        经过几天的学习,终于将点阵解析出来了,在这里总结一下,点阵的分布是一位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。



原创粉丝点击