emwin最近的版本支持多点触摸,但是网上资料不是一般的少,有一个人说自己在开发板上实践了一下,经过对比还是手册里面的图,根本没实现嘛,代码也不给,只好自己去研究一下.
受到思维定式问题.一直觉得国内那正点原子的教程不错,就对着看.他的移植方法是新建函数.
发现这是不对的,实际上应该给一个定时器任务,或者操作系统,我选择了后者,然后定期上报坐标.如下.
static void EMWin_Thread(void *pvParameters) { while(1) { GUIDEMO_Main(); vTaskDelay(1000); } } static void Touch_Thread(void *pvParameters) { /* typedef struct { int LayerIndex; unsigned NumPoints; GUI_TIMER_TIME TimeStamp; GUI_HMEM hInput; } GUI_MTOUCH_EVENT; */ GUI_MTOUCH_EVENT mt_pEvent; /* typedef struct { I32 x; I32 y; U32 Id; U16 Flags; } GUI_MTOUCH_INPUT; */ GUI_MTOUCH_INPUT mt_pInput; GUI_MTOUCH_Enable(1); GUI_SetPenSize(5); uint8_t x = 0; while(1) { mt_pEvent.TimeStamp = GUI_GetTime(); mt_pEvent.NumPoints = 1; mt_pEvent.LayerIndex = 0; mt_pInput.x = x++; mt_pInput.y = x; mt_pInput.Id = 0; mt_pInput.Flags = GUI_MTOUCH_FLAG_MOVE; GUI_MTOUCH_StoreEvent(&mt_pEvent, &mt_pInput); vTaskDelay(100); } }
多点触摸其实就是这么来,人工储存这个Event,然后就可以了.之前想太多了.如果要两点怎么办,官方还是有解释的.
指向第一个元素就行,他会自己来解决.