硬汉嵌入式论坛

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

[emWin] DROPDOWN控件自定义回调函数,方便使用方向键控制

[复制链接]

354

主题

2164

回帖

3231

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3231
发表于 2018-8-24 14:48:51 | 显示全部楼层 |阅读模式
本帖最后由 caicaptain2 于 2018-8-24 14:51 编辑

这是一个产品开发过程中的小案例: 简易的设备按键输入只有“上下左右”方向键和确认键。
在使用DROPDOWN控件的时候,一旦把焦点移动到它上面的时候,方向键和确认键就陷在里面,再也出不来了。。。WM_DisableWindow()对此控件无用,控件依然可以正常操作。
改善后的回调函数,可以使用确认键开启或者下拉选项,焦点在它上的时候,也可以通过方向键移出来。
  1. //自定义DROPDOWN控件回调函数,可响应enter。 2018-8-24
  2. void User_DROPDOWN_Callback(WM_MESSAGE *pMsg)
  3. {
  4.     WM_MESSAGE pMsgtoParent;
  5.     WM_HWIN hItem;
  6.     hItem=pMsg->hWin;
  7.     switch (pMsg->MsgId)
  8.     {
  9.     case WM_KEY:
  10.         switch((((WM_KEY_INFO*)(pMsg->Data.p))->Key))
  11.         {
  12.         case GUI_KEY_ENTER:
  13.             DROPDOWN_Expand(hItem);  //这个函数很关键,进入后响应上下左右。确认后才退出
  14.             break;
  15.         default:  //其他按键传递按键到父窗口。
  16.             //DROPDOWN_Callback(pMsg); 不能执行这个,所有按键会停在里面出不来。
  17.             pMsgtoParent.MsgId=WM_KEY;//以下三行是为了把按键信息发送给控件的父窗口,以便移动焦点,
  18.             pMsgtoParent.Data.p=(pMsg->Data.p);
  19.             WM_SendToParent(hItem,&pMsgtoParent);
  20.             break;
  21.         }
  22.         break;
  23.     default:
  24.         DROPDOWN_Callback(pMsg);
  25.         break;
  26.     }
  27. }
复制代码

使用这个回调函数的时候,
  1.         hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_AAA);
  2.         DROPDOWN_SetListHeight(hItem,60);
  3. <div>        DROPDOWN_AddString(hItem,"关");</div><div>        DROPDOWN_AddString(hItem,"开");
  4. </div>        WM_SetCallback(hItem, User_DROPDOWN_Callback); //设定自定义的EDIT回调函数
复制代码


评分

参与人数 1金币 +50 收起 理由
eric2013 + 50 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-25 01:30:13 | 显示全部楼层
非常感谢楼主分享。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 06:26 , Processed in 0.340013 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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