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,然后就可以了.之前想太多了.如果要两点怎么办,官方还是有解释的.

指向第一个元素就行,他会自己来解决.