emwin实现多点触摸难点

/ 0评 / 1

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

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注