硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2825|回复: 5
收起左侧

[emWin] 为何触屏按钮没反应

[复制链接]

2

主题

6

回帖

12

积分

新手上路

积分
12
发表于 2019-2-15 10:39:28 | 显示全部楼层 |阅读模式
使用裸机,用GUIBuilder建立了一个FramewinDLG.c   包括一个 Framewin,一个按钮,一个滑动条,一个进度条
在主循环里只做一件事,每10ms读取坐标并通过 GUI_PID_StoreState(&State);  函数传到emwin。
在调试里发现 State结构体 已经被赋值了,但是 _cbDialog(WM_MESSAGE * pMsg)  一直没有被调用,请问这是哪里有问题呢

'''
GUI_PID_STATE State;
void PidTask(void) {
  static U8  PressedOld;
  U8  Pressed;
  TouchPoint tp = get_touch_point();
  Pressed = tp.press;// TBD: Insert function which returns:
            //      1, if the touch screen is pressed
            //      0, if the touch screen is released
  /* 判断是否有触摸数据 */
  if (Pressed == 0) { /* 无触摸 */
    if (PressedOld == 1) {
      /* State.x 和 State.y 的数值无需更新,State 是全局变量,保存的就是最近一次的数值 */
      PressedOld = 0;
      State.Pressed = 0;
      GUI_PID_StoreState(&State); /* 释放 */
    } else {
      return;
    }
  } else {  /* 有触摸 */
    PressedOld = 1;
    State.x = tp.x;;
    State.y = tp.y;;
    State.Pressed = 1;
    GUI_PID_StoreState(&State);
  }
}

'''



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-2-15 10:41:55 | 显示全部楼层
方便的话,我看下你的emWin应用部分的完整程序,以及你的emWin裸机接口文件GUI_X.C怎么写的。
回复

使用道具 举报

2

主题

6

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2019-2-15 10:56:23 | 显示全部楼层
eric2013 发表于 2019-2-15 10:41
方便的话,我看下你的emWin应用部分的完整程序,以及你的emWin裸机接口文件GUI_X.C怎么写的。

谢谢回复
GUI_X.c  我没有做改动,只有两个函数是有函数体的

GUI_TIMER_TIME GUI_X_GetTime(void) {
  return OS_TimeMS;
}
void GUI_X_Delay(int ms) {
  int tEnd = OS_TimeMS + ms;
  while ((tEnd - OS_TimeMS) > 0);
}


其中 OS_TimeMS 在systick中断里自增,1ms中断
extern __IO int32_t OS_TimeMS;

void SysTick_Handler(void) {
  DelayDecrement();
  system_tick++;
  OS_TimeMS ++;
}


主函数只做了一件事
while (1) {
    if (get_system_tick() % 10 == 0) {
      RecvTouchPoint();
      PidTask();
    }

}

LCDConf_FlexColor.c

7.69 KB, 下载次数: 6

FramewinDLG.c

6.75 KB, 下载次数: 6

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-2-15 11:21:14 | 显示全部楼层
MainTask里面你要这么写,GUI_Delay要是在while大循环里面循环调用


QQ截图20190215112012.jpg


回复

使用道具 举报

2

主题

6

回帖

12

积分

新手上路

积分
12
 楼主| 发表于 2019-2-15 11:40:22 | 显示全部楼层
eric2013 发表于 2019-2-15 11:21
MainTask里面你要这么写,GUI_Delay要是在while大循环里面循环调用

我按您说的修改成这样之后可以识别触屏了
void MainTask(void)
{
  CreateFramewin();
  while(1){
      RecvTouchPoint();
      PidTask();
    GUI_Delay(10);
  }  
}


我在网上查了一下,其实原因应该是我没有调用GUI_Exec(); 对吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-2-15 11:51:55 | 显示全部楼层
chuan0144 发表于 2019-2-15 11:40
我按您说的修改成这样之后可以识别触屏了
void MainTask(void)
{

GUI_Delay,GUI_Exec或者WM_Exec会执行窗口管理器功能。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-17 20:25 , Processed in 0.247202 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表