硬汉嵌入式论坛

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

[emWin] LISTBOX选中项循环问题

[复制链接]

7

主题

13

回帖

34

积分

新手上路

积分
34
发表于 2024-7-16 22:58:09 | 显示全部楼层 |阅读模式
请问emwin的LISTBOX控件可以实现按键按到最后一行回到第一行,类似这样的循环效果吗?我尝试使用LISTBOX_SetSel,但好像不起作用

下面是实现的部分代码



case WM_KEY:
        {
            if (((WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt)
            {
                int Key = ((WM_KEY_INFO*)(pMsg->Data.p))->Key;
                hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_0);
                int Sel = LISTBOX_GetSel(hItem);
                int ItemCount = LISTBOX_GetNumItems(hItem);

                if (Key == GUI_KEY_DOWN)
                {
                    if (Sel == ItemCount - 1) // 如果当前选择是最后一项
                    {
                        LISTBOX_SetSel(hItem, 0); // 设置选择为第一项
                    }
                    else
                    {
                        LISTBOX_SetSel(hItem, Sel + 1); // 选择下一项
                    }
                }
                else if (Key == GUI_KEY_UP)
                {
                    if (Sel == 0) // 如果当前选择是第一项
                    {
                        LISTBOX_SetSel(hItem, ItemCount - 1); // 设置选择为最后一项
                    }
                    else
                    {
                        LISTBOX_SetSel(hItem, Sel - 1); // 选择上一项
                    }
                }
                else
                {
                    ProcessKeyEvent(Key, ((WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt);
                }
            }
        }
        break;




回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115896
QQ
发表于 2024-7-17 09:25:33 | 显示全部楼层
楼主这里直接在WM_KEY里面仅处理了LISTBOX,这个判断无法屏蔽if (((WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt)也处理其他控件消息,这个地方注意下就行。

然后就是这个LISTBOX_SetSel,我之前使用窗口自定义消息测试过,可以实现楼主说的功能,WM_KEY消息里面没测试过。

回复

使用道具 举报

7

主题

13

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2024-7-17 09:37:03 | 显示全部楼层
eric2013 发表于 2024-7-17 09:25
楼主这里直接在WM_KEY里面仅处理了LISTBOX,这个判断无法屏蔽if (((WM_KEY_INFO*)(pMsg->Data.p))->Pressed ...

大佬,不太理解你说的意思,你是指这个判断条件不对吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115896
QQ
发表于 2024-7-17 09:51:54 | 显示全部楼层
YISHUI 发表于 2024-7-17 09:37
大佬,不太理解你说的意思,你是指这个判断条件不对吗?

对,我认为无法屏蔽操作其它控件也进入这里面。

不过仅针对你楼主的问题,这个不是问题,可以仅聚焦到这个LISTBOX上测试。
回复

使用道具 举报

7

主题

13

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2024-7-17 10:16:57 | 显示全部楼层
eric2013 发表于 2024-7-17 09:51
对,我认为无法屏蔽操作其它控件也进入这里面。

不过仅针对你楼主的问题,这个不是问题,可以仅聚焦到 ...

仅聚焦到这个LISTBOX上测试,请问这个如何测试呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115896
QQ
发表于 2024-7-17 11:04:25 | 显示全部楼层
YISHUI 发表于 2024-7-17 10:16
仅聚焦到这个LISTBOX上测试,请问这个如何测试呢?

有个SetFocus的API,调用下
回复

使用道具 举报

7

主题

13

回帖

34

积分

新手上路

积分
34
 楼主| 发表于 2024-7-17 11:46:36 | 显示全部楼层
eric2013 发表于 2024-7-17 09:25
楼主这里直接在WM_KEY里面仅处理了LISTBOX,这个判断无法屏蔽if (((WM_KEY_INFO*)(pMsg->Data.p))->Pressed ...

大佬,你测试成功的代码能发一下吗?我用聚焦的API还是无法实现
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115896
QQ
发表于 2024-7-18 08:07:58 | 显示全部楼层
YISHUI 发表于 2024-7-17 11:46
大佬,你测试成功的代码能发一下吗?我用聚焦的API还是无法实现

这个代码很久以前的了,忘了集成到那个工程里面了。

思路就是发送的窗口自定义消息控制的。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-25 16:25 , Processed in 0.248978 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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