硬汉嵌入式论坛

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

[emWin] 软键盘与LIST

[复制链接]

2

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2019-7-3 17:43:44 | 显示全部楼层 |阅读模式
汉哥,我用Frame窗口制作了个软件小键盘+EDIT,另一个Frame窗口有个LISTVIEW和按键,想通过选择单元格,然后按键打开键盘,输入的数字显示在EDIT上,按下确认键时隐藏键盘界面,并将选定的单元格文本修改为我刚刚输入的数字。自己试时确定单元格已经可以做到修改功能了,虽然只能修改1个数字,但选择单元格修改却不行,请问有什么方法么?
现在用的方法是自定义消息发送输入的数据,表格窗口接收到数据后用LISTVIEW_SetItemText()函数,当单元格选择发生改变时,在WM_NOTIFICATION_SEL_CHANGED消息下面通过LISTVIEW_GetSel和LISTVIEW_GetSelCol函数来获取选定单元格的X,Y
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-7-3 17:51:27 | 显示全部楼层
选择单元格修改却不行 ---这句话是指的什么

你当前的处理方法,我觉得可以啊
回复

使用道具 举报

2

主题

2

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2019-7-3 17:57:06 | 显示全部楼层
          case ID_LISTVIEW_0:
                  switch(NCode)
                  {
                          case WM_NOTIFICATION_SEL_CHANGED:                //单元格选择发生变化
                                  hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_0);
                                  Selx=LISTVIEW_GetSelCol(hItem);                //获取单元格行坐标X
                                  Sely=LISTVIEW_GetSel(hItem);                        //获取单元格列坐标Y
                           break;
                  }
           break;
当选择单元格时,获取坐标,然后当修改数据按键按下时,显示键盘,键盘输入完按下确认键时,给列表窗口发送一个自定义消息,在自定义消息里面修改LIST
  case MSG_GETDATA_LIST:
          MData=pMsg->Data.p;        //提取消息附带的数据
          hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_0);
          LISTVIEW_SetItemText(hItem, Selx, Sely, MData);                        //设置单元格文本(x,y)
        break;
这种修改不了,没反应
        LISTVIEW_SetItemText(hItem, 1, 0, MData);                        //设置单元格文本(x,y)
像这样改成固定单元格的话是可以修改的,但不管我输入多少数字,只显示第一个数字
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-7-3 18:02:12 | 显示全部楼层
霖夜妖妖 发表于 2019-7-3 17:57
case ID_LISTVIEW_0:
                  switch(NCode)
                  {

两个问题
1、 LISTVIEW_SetItemText前,看下你的Selx, Sely的实际数值是多少,务必要是全局变量,或者静态局部变量
2、函数LISTVIEW_SetItemText是显示的文本,你要进你的MData换成文本才行

用sprintf将MData转换下,然后给LISTVIEW_SetItemText调用
回复

使用道具 举报

2

主题

2

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2019-7-3 18:26:06 | 显示全部楼层
eric2013 发表于 2019-7-3 18:02
两个问题
1、 LISTVIEW_SetItemText前,看下你的Selx, Sely的实际数值是多少,务必要是全局变量,或者静 ...

谢谢硬汉哥,串口输出后发现坐标不准确,而且同一行选择时不会触发单元格更改消息,把WM_NOTIFICATION_MOVED_OUT改成了WM_NOTIFICATION_CLICKED,再把俩变量改为全局变量,已经没事了。
顺便说一下:
EDIT_GetText(hItem,apBuffer,sizeof(apBuffer));                //获取EDIT数据
Message.Data.p=apBuffer;                        //数据
MData=pMsg->Data.p;        //提取消息附带的数据
输出MData用的是printf("%c",MData);
貌似EDIT_GetText函数提取的就是文本,不需要sprintf转换,EDIT可以把文本模式转换为其他模式,但没去研究,可能其他模式需要转换。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-18 00:38 , Processed in 0.209708 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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