完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我先上代码[C] 纯文本查看 复制代码
void UpdateListView(void){unsigned char i;unsigned char str_date[10];unsigned char str_time[10];unsigned char str_num[10];char Record[3][10];/********* date translate to string type (example : 2014-06-06) **************/str_date[0] = Clock.Year/1000+0x30; //year first bitstr_date[1] = (Clock.Year/100)%10+0x30; //year second bitstr_date[2] = (Clock.Year%100)/10+0x30;//year third bitstr_date[3] = Clock.Year%10+0x30;//year fouth bitstr_date[4] = '-';str_date[5] = Clock.Month/10+0x30;//month first bitstr_date[6] = Clock.Month%10+0x30;//month second bitstr_date[7] = '-';str_date[8] = Clock.Day/10+0x30;//day fisrt bitstr_date[9] = Clock.Day%10+0x30;//day second bit/*********** time translte to string type (example: 12:12:00) **************/str_time[0] = Clock.Hour/10+0x30;//hour fisrt bitstr_time[1] = Clock.Hour%10+0x30;//hour second bitstr_time[2] = '-';str_time[3] = Clock.Min/10+0x30;//minute 1 bitstr_time[4] = Clock.Min%10+0x30;//minute 2 bitstr_time[5] = '-';str_time[6] = Clock.Sec/10+0x30;//second 1 bitstr_time[7] = Clock.Sec%10+0x30;//second 2 bit/*********** number of student or teacher translate to string ***************/str_num[0] = card_num;for(i=0;i<10;i++){Record[0] = str_date;Record[1] = str_time;Record[2] = str_num;}/************* translate to Record to display in listview *******************/for (i = 0; i < GUI_COUNTOF(Record); i++) { LISTVIEW_AddRow(listview, ( GUI_ConstString *)Record); }}如上,我想实现一个LISTVIEW 数据更显的操作,可是我看了uCGUI 3.90就爱 LISTVIEW_AddRow();可以添加,而且这个函数添加行的数据时 const GUI_ConstString* 类型的,还有一个函数, void LISTVIEW_SetItemText (LISTVIEW_Handle hObj, unsigned Column, unsigned Row, const char * s); 这个函数怎么添加呢?如上怎么实现我的功能呢?我的功能是 LISTVIEW有三列 ,然后每次添加一行。 |
|
相关推荐
14个回答
|
|
好吧,终于解决了,还是因为指针数组的处理问题,导致了内存错误,不过还是挺感谢你的。
|
|
|
|
帮顶....
|
|
|
|
为什么 uCGUI 的LISTVIEW 插入的单元格内容都要是const 类型!!!!那我的是变量类型就不行吗?
void LISTVIEW_SetItemText(LISTVIEW_Handle hObj, unsigned Column,unsigned Row, const char * s); int LISTVIEW_InsertRow(LISTVIEW_Handle hObj, unsigned Index, const GUI_ConstString * ppText); void LISTVIEW_AddRow(LISTVIEW_Handle hObj, const GUI_ConstString * ppText); 谁能告诉我这是为什么呀?? |
|
|
|
这源于它界面更新的机制,读下该部分代码。
|
|
|
|
能具体告诉我一点吗?我看来例程都没发现,都是用的const 定义的量,直接添加进去,没看到可以不断更新的,谢谢你了!
|
|
|
|
5楼是对应问题“内容都要是const类型?”的回复。
|
|
|
|
|
|
|
|
|
|
|
|
手册[The Window Manager]章,[Callback mechanism, invalidation, rendering and keyboard input]节。
|
|
|
|
我还是没看出来,使用LISTVIEW 和这几个函数与回调和渲染有什么关系。。。。
|
|
|
|
看完文档,再看代码,就会顿觉明了。
|
|
|
|
我看来例程和相关函数,就以 void LISTVIEW_AddRow(LISTVIEW_Handle hObj, const GUI_ConstString* ppText) 为例,下面是源码:
/********************************************************************* * * LISTVIEW_AddRow */ void LISTVIEW_AddRow(LISTVIEW_Handle hObj, const GUI_ConstString* ppText) { if (hObj) { LISTVIEW_Obj* pObj; int NumRows; WM_LOCK(); pObj = LISTVIEW_H2P(hObj); NumRows = GUI_ARRAY_GetNumItems(&pObj->RowArray); /* Create GUI_ARRAY for the new row */ if (GUI_ARRAY_AddItem(&pObj->RowArray, NULL, sizeof(GUI_ARRAY)) == 0) { int i, NumColumns, NumBytes; GUI_ARRAY* pRow; const char* s; GUI_ARRAY_CREATE((GUI_ARRAY *)GUI_ARRAY_GetpItem(&pObj->RowArray, NumRows)); /* For higher debug levels only */ /* Add columns for the new row */ NumColumns = HEADER_GetNumItems(pObj->hHeader); for (i = 0; i < NumColumns; i++) { LISTVIEW_ITEM * pItem; pRow = (GUI_ARRAY *)GUI_ARRAY_GetpItem(&pObj->RowArray, NumRows); s = (ppText) ? *ppText++: 0; if (s == 0) { ppText = 0; } NumBytes = GUI__strlen(s) + 1; /* 0 if no string is specified (s == NULL) */ GUI_ARRAY_AddItem(pRow, NULL, sizeof(LISTVIEW_ITEM) + NumBytes); pItem = (LISTVIEW_ITEM *)GUI_ARRAY_GetpItem(pRow, i); if (NumBytes > 1) { strcpy(pItem->acText, s); } } LISTVIEW__UpdateScrollParas(hObj, pObj); LISTVIEW__InvalidateRow(hObj, pObj, NumRows); } WM_UNLOCK(); } } 抛开其他,只看数据处理部分: for(.....) if (NumBytes > 1) { strcpy(pItem->acText, s); } NumBytes = GUI__strlen(s) + 1; /* 0 if no string is specified (s == NULL) */ GUI_ARRAY_AddItem(pRow, NULL, sizeof(LISTVIEW_ITEM) + NumBytes); pItem = (LISTVIEW_ITEM *)GUI_ARRAY_GetpItem(pRow, i); if (NumBytes > 1) { strcpy(pItem->acText, s); } ....... 这里很显然是数据的cpoy,而当我使用非初始化的 const 字符串时,程序就会进入硬件错误,粗略判断是内存错误,即数组或者指针的问题,所以我觉得问题的关键是数据处理,而你说的回调和重绘机制,比如函数最后的无效化,这些都只是界面显示的问题,我觉得不可能造成内存错误,所以,我觉得关键点不在这里,你觉得我的说话有道理不? |
|
|
|
你的意思是不是要使用重绘函数 Exec()呢?我也试过下面的方法,
....... LISTVIEW_SetItemText(_hListView, 1,1,"bb"); GUI_Exec(); ....... 这样不会报错,而且也能运行,但是也显示不出来,我觉得这可能是你说的问题,但是当使用 ............. LISTVIEW_InsertRow(_hListView, 1, "tt"); 就会报错,这里的区别呢? |
|
|
|
能否具体说说怎么解决的呢?我调用LISTVIEW_SetItemText 函数也是什么都不显示。谢谢
|
|
|
|
只有小组成员才能发言,加入小组>>
785 浏览 0 评论
1151 浏览 1 评论
2527 浏览 5 评论
2859 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1068浏览 3评论
190浏览 2评论
455浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 22:44 , Processed in 1.185764 second(s), Total 76, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号