硬汉嵌入式论坛

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

[emWin] stemwin的listview问题

[复制链接]

13

主题

59

回帖

98

积分

初级会员

积分
98
发表于 2024-10-30 23:02:28 | 显示全部楼层 |阅读模式

最近使用STEMWIN5.44版本的LISTVIEW控件时建立了2列的多行数据,使用函数
LISTVIEW_SetItemTextColor(hItem, 1, s_ListviewSelIndex, LISTVIEW_CI_SELFOCUS, GUI_WHITE);设置相关行第二列的文本颜色,直接进入了HardFault_Handler硬件中断错误

不知道为何会出现这个问题
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-10-31 11:08:11 | 显示全部楼层
看看是不是这两个参数不对,

越界了

ISTVIEW_SetItemTextColor(hItem, 1, s_ListviewSelIndex, LISTVIEW_CI_SELFOCUS, GUI_WHITE);
回复

使用道具 举报

13

主题

59

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-10-31 22:20:25 | 显示全部楼层
eric2013 发表于 2024-10-31 11:08
看看是不是这两个参数不对,

越界了

感谢硬汉哥回复,没有越界,建立了多行的2列表格。上面的这个变量s_ListviewSelIndex 是获取选中的行
hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_0);
s_ListviewSelIndex = LISTVIEW_GetSel(hItem);
if(g_ParaList[s_ListviewSelIndex].EditableFlag)//item可编辑标志
{
        if(s_u8itemEditStatus)
                                {
                                      s_u8itemEditStatus = 0;
                                        GetParaValueString(s_ListviewSelIndex,strbuffer);
                                        LISTVIEW_SetItemText(hItem, 0, s_ListviewSelIndex, g_ParaList[s_ListviewSelIndex].ParName);//左侧参数名称
                                        LISTVIEW_SetItemText(hItem, 1, s_ListviewSelIndex, strbuffer);//右侧显示参数的数值或设置
                                        LISTVIEW_SetItemTextColor(hItem, 1, s_ListviewSelIndex, LISTVIEW_CI_SELFOCUS, GUI_YELLOW);
                                }
                                else
                                {
                                  s_u8itemEditStatus = 1;
                                        GetParaValueString(s_ListviewSelIndex,strbuffer);
                                        LISTVIEW_SetItemText(hItem, 0, s_ListviewSelIndex, g_ParaList[s_ListviewSelIndex].ParName);//左侧参数名称
                                        LISTVIEW_SetItemText(hItem, 1, s_ListviewSelIndex, strbuffer);
                                        LISTVIEW_SetItemTextColor(hItem, 1, s_ListviewSelIndex, LISTVIEW_CI_SELFOCUS, GUI_YELLOW);
                                }
                        }
                        else
                        {
                                if(g_ParaList[s_ListviewSelIndex].ParBeforeChgeFun)
                                {
                                  g_ParaList[s_ListviewSelIndex].ParBeforeChgeFun(pMsg);
                                }
                        }   

用这个函数LISTVIEW_IncSel(hItem);改变选择的行
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-11-1 09:27:23 | 显示全部楼层
ajianyes 发表于 2024-10-31 22:20
感谢硬汉哥回复,没有越界,建立了多行的2列表格。上面的这个变量s_ListviewSelIndex 是获取选中的行
hI ...

可以肯定的是,有个函数访问的参数应该是无效的,这种情况会造成硬件异常
回复

使用道具 举报

13

主题

59

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-11-1 11:08:04 | 显示全部楼层
eric2013 发表于 2024-11-1 09:27
可以肯定的是,有个函数访问的参数应该是无效的,这种情况会造成硬件异常

感谢您的回复,这个问题有点奇怪。
LISTVIEW_SetItemText(hItem, 0, s_ListviewSelIndex,g_ParaList[s_ListviewSelIndex].ParName);//左侧参数名称 LISTVIEW_SetItemText(hItem, 1, s_ListviewSelIndex, strbuffer);
调用这两个函数进行文本更新是没问题的,传输的参数不应该会有错误了啊。主要想实现的功能就是选中该行之后, 按下确认按键进行右侧参数修改,右侧可修改的参数文本颜色变色提示可进行更改了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-11-2 10:30:28 | 显示全部楼层
ajianyes 发表于 2024-11-1 11:08
感谢您的回复,这个问题有点奇怪。
LISTVIEW_SetItemText(hItem, 0, s_ListviewSelIndex,g_ParaList[s_L ...

不要传递了,手动直接设置个参数填入LISTVIEW_SetItemText调用,看看正常不
回复

使用道具 举报

13

主题

59

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-11-2 22:18:55 | 显示全部楼层
eric2013 发表于 2024-11-2 10:30
不要传递了,手动直接设置个参数填入LISTVIEW_SetItemText调用,看看正常不

感谢回复,这个函数LISTVIEW_SetItemText是正常,主要是这个函数LISTVIEW_SetItemTextColor,改成这样LISTVIEW_SetItemTextColor(hItem, 0, 0, LISTVIEW_CI_SELFOCUS, GUI_YELLOW);不传输参形参也还是一样进入了hardfault
回复

使用道具 举报

13

主题

59

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-11-2 23:02:24 | 显示全部楼层
补充下信息,我是用外部按键WM_KEY处理的,用LISTVIEW_SetSel选中ITEM按下按键,用LISTVIEW_SetItemTextColor修改对应列的颜色,进入编辑状态
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-11-3 09:34:28 | 显示全部楼层
ajianyes 发表于 2024-11-2 22:18
感谢回复,这个函数LISTVIEW_SetItemText是正常,主要是这个函数LISTVIEW_SetItemTextColor,改成这样LIS ...

这个函数我调用过,是没问题的,难道是emWin版本问题。
LISTVIEW_SetItemTextColor第1个参数句柄确定没问题吧


回复

使用道具 举报

13

主题

59

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-11-3 18:41:51 | 显示全部楼层
eric2013 发表于 2024-11-3 09:34
这个函数我调用过,是没问题的,难道是emWin版本问题。
LISTVIEW_SetItemTextColor第1个参数句柄确定没 ...

是的,参数没问题的。我做了一个测试,在WM_INIT_DIALOG调用这个函数LISTVIEW_SetItemTextColor就可以正常显示,但是在WM_KEY里面调用就死机。这个函数LISTVIEW_SetBkColor也是一样情况
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-11-4 08:54:42 | 显示全部楼层
ajianyes 发表于 2024-11-3 18:41
是的,参数没问题的。我做了一个测试,在WM_INIT_DIALOG调用这个函数LISTVIEW_SetItemTextColor就可以正 ...

在这个WM_KEY里面启动个emWin单次定时器,在定时器的WM_TIMER里面绘制试试
回复

使用道具 举报

13

主题

59

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-11-4 22:19:19 | 显示全部楼层
eric2013 发表于 2024-11-4 08:54
在这个WM_KEY里面启动个emWin单次定时器,在定时器的WM_TIMER里面绘制试试

好的,我试试看哈。感谢您的支持
回复

使用道具 举报

13

主题

59

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-11-10 22:54:21 | 显示全部楼层
eric2013 发表于 2024-11-4 08:54
在这个WM_KEY里面启动个emWin单次定时器,在定时器的WM_TIMER里面绘制试试

最终这个问题终于找到原因了,跟版本没有任何关系。是我的按键发送消息使用了GUI_SendKeyMsg函数导致了emwin接收到消息后进入硬件中断,改成GUI_StoreKeyMsg就可以正常运行了。感谢硬汉哥的热心帮助
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-11-11 09:16:39 | 显示全部楼层
ajianyes 发表于 2024-11-10 22:54
最终这个问题终于找到原因了,跟版本没有任何关系。是我的按键发送消息使用了GUI_SendKeyMsg函数导致了em ...

谢谢告知最终原因,那估计是这个问题


回复

使用道具 举报

13

主题

59

回帖

98

积分

初级会员

积分
98
 楼主| 发表于 2024-11-11 13:15:14 | 显示全部楼层
eric2013 发表于 2024-11-11 09:16
谢谢告知最终原因,那估计是这个问题

感谢您的帮助,我也是进行了逐个排查,才找到问题点。手册看得还是不够,想要熟练掌握各个知识点要做具体项目结合
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 21:29 , Processed in 0.303387 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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