硬汉嵌入式论坛

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

[μCGUI] uCOSIII和uCGUI3.98移植出现BUTTON按键无法输出WM_NOTIFICATION_RELEASED消息问题

[复制链接]

7

主题

14

回帖

35

积分

新手上路

积分
35
发表于 2017-11-22 13:33:13 | 显示全部楼层 |阅读模式
    最近做了一下uCOSIII和uCGUI3.98移植。显示没什么问题,uCGUI的demo也能跑,然后自己写了个对话框,对话框有若干按钮,在显示器上按button,button有反应但是不会执行代码,调试发现在

        Id = WM_GetId(pMsg->hWinSrc);
        NCode = pMsg->Data.v;
        switch(NCode)
        {
        case  WM_NOTIFICATION_RELEASED:

            case GUI_ID_OK:
                EDIT_AddKey(WM_GetDialogItem(hWin,GUI_ID_EDIT0),'\0');
                EDIT_GetText(WM_GetDialogItem(hWin,GUI_ID_EDIT0),numb,9);
                GUI_MessageBox(&quotress Right Number","Warning!!",0);
                break;
            case GUI_ID_CANCEL:
                GUI_EndDialog(hWin, 0);
                break;

NCode 的值开始为1(WM_NOTIFICATION_CLICKED),后来为WM_NOTIFICATION_MOVED_OUT(3),一直不是想要的WM_NOTIFICATION_RELEASED,故程序没有运行。请问大家有没有遇到过这样的情况?一般这样的情况,问题会出现在哪里?

static void _OnTouch(BUTTON_Handle hObj, BUTTON_Obj* pObj, WM_MESSAGE*pMsg) {
  const GUI_PID_STATE* pState = (const GUI_PID_STATE*)pMsg->Data.p;
#if BUTTON_REACT_ON_LEVEL
  if (!pMsg->Data.p) {  /* Mouse moved out */
    _OnButtonReleased(hObj, pObj, WM_NOTIFICATION_MOVED_OUT);
  } else if ((!pState-&gtressed) && (pObj->Widget.State & BUTTON_STATE_PRESSED)) {
    _OnButtonReleased(hObj, pObj, WM_NOTIFICATION_MOVED_OUT);
  }
#else
  if (pMsg->Data.p) {  /* Something happened in our area (pressed or released) */
    if (pState-&gtressed) {
      if ((pObj->Widget.State & BUTTON_STATE_PRESSED) == 0){   
        _OnButtonPressed(hObj, pObj);
      }
    } else {
      /* React only if button was pressed before ... avoid problems with moving / hiding windows above (such as dropdown) */
      if (pObj->Widget.State & BUTTON_STATE_PRESSED) {   
        _OnButtonReleased(hObj, pObj, WM_NOTIFICATION_RELEASED);
      }
    }
  } else {
    _OnButtonReleased(hObj, pObj, WM_NOTIFICATION_MOVED_OUT);
  }
#endif
}

pObj->Widget.State这个值在消息反馈时候好像出了问题。不知道有没有朋友可以给点提示,如有必要我可以发我LCD和触摸驱动上来,大家一起找找原因。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107260
QQ
发表于 2017-11-22 13:36:40 | 显示全部楼层
你的问题应该跟这位网友的问题差不多:http://www.armbbs.cn/forum.php?m ... 962&fpage=2

这种情况一般是你的触摸驱动有问题,你串口打印下触摸坐标,看看是不是松手了,还是按下的状态,一直没有释放。
回复

使用道具 举报

7

主题

14

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2017-11-22 14:06:44 | 显示全部楼层
GUI_TOUCH_X_MeasureX和GUI_TOUCH_X_MeasureY函数不是只有触摸点坐标ad值吗?按下释放状态是如何检测的啊?
回复

使用道具 举报

7

主题

14

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2017-11-22 14:14:28 | 显示全部楼层
我触摸点坐标打印出来,是这样的,貌似是释放了的呢。
x = 0
y = 0
x = 0
y = 0
x = 665
y = 288
x = 665
y = 288
x = 665
y = 288
x = 665
y = 287
x = 665
y = 287
x = 664
y = 286
x = 664
y = 286
x = 664
y = 286
x = 664
y = 286
x = 664
y = 286
x = 664
y = 286
x = 0
y = 0
x = 0
y = 0
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107260
QQ
发表于 2017-11-22 14:14:32 | 显示全部楼层

回 sanvlee 的帖子

sanvlee:GUI_TOUCH_X_MeasureX和GUI_TOUCH_X_MeasureY函数不是只有触摸点坐标ad值吗?按下释放状态是如何检测的啊? (2017-11-22 14:06)
测试你的AD数值,系统上电后,正确的是打印的边界值。
你触摸控件后,看看是不是松手了,还在在输出有效的坐标位置,即不是上电时的那个边界值了。

ps:直接给这两个函数送坐标值是早期的实现方法了,现在我们已经都修改成直接送坐标位置了,即使用函数GUI_PID_StoreState
State.x = x;

State.y = y;
State.Pressed = 1;  1表示按下,0表示松手
GUI_PID_StoreState(&State);
回复

使用道具 举报

7

主题

14

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2017-11-22 14:19:25 | 显示全部楼层

回 eric2013 的帖子

eric2013:测试你的AD数值,系统上电后,正确的是打印的边界值。
你触摸控件后,看看是不是松手了,还在在输出有效的坐标位置,即不是上电时的那个边界值了。 (2017-11-22 14:14) 
应该是和你给的网友一样的问题,我也是FT5206的芯片,应该是没有把松手状态传给ucgui。谢谢汉哥!
回复

使用道具 举报

7

主题

14

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2017-11-22 14:22:06 | 显示全部楼层

回 eric2013 的帖子

eric2013:测试你的AD数值,系统上电后,正确的是打印的边界值。
你触摸控件后,看看是不是松手了,还在在输出有效的坐标位置,即不是上电时的那个边界值了。

ps:直接给这两个函数送坐标值是早期的实现方法了,现在我们已经都修改成直接送坐标位置了,即使用函数GUI_PID_StoreState
..... .. (2017-11-22 14:14) 
有没有新方法的例子给小弟一份看看?谢谢。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107260
QQ
发表于 2017-11-22 15:48:30 | 显示全部楼层

回 sanvlee 的帖子

sanvlee:有没有新方法的例子给小弟一份看看?谢谢。 (2017-11-22 14:22) 
任意下载这个帖子里面的一个例子:http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834

里面有个bsp驱动包,其中FT5X06的是文件bsp_ts_ft5x06.c
回复

使用道具 举报

7

主题

14

回帖

35

积分

新手上路

积分
35
 楼主| 发表于 2017-11-22 16:30:46 | 显示全部楼层

回 eric2013 的帖子

eric2013:任意下载这个帖子里面的一个例子:http://www.armbbs.cn/forum.php?mod=viewthread&tid=19834

里面有个bsp驱动包,其中FT5X06的是文件bsp_ts_ft5x06.c (2017-11-22 15:48) 
谢谢,汉哥!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 09:59 , Processed in 0.181891 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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