哥有个问题想打扰你一下,我在重新填充listview的内容时,listview内容有概率显示错误,但是发送keymessage选中行,选中后的行会正确显示。试了好多方法都没法解决,下面是填充listview内容的代码,问题出现在PAGE_TYPE_MENU类型的内容填充上
[C] 纯文本查看 复制代码 void SCREEN_Switch(LISTVIEW_Handle listview,WM_HWIN hWin)
{
WM_EnableMemdev(hWin);
LISTVIEW_DeleteAllRows(listview);
switch(Lcd_Obj.run.frm[Lcd_Obj.run.page_idx].type)
{
case PAGE_TYPE_MENU:;
struct LCD_LINE_ITEM_TYPE *pItem;
pItem = Lcd_Obj.run.frm[Lcd_Obj.run.page_idx].data;
LISTVIEW_DeleteColumn(listview,1);
LISTVIEW_DeleteColumn(listview,0);
LISTVIEW_AddColumn(listview,320,NULL,GUI_ALIGN_LEFT|GUI_ALIGN_VCENTER);
for(int i=0;i<Lcd_Obj.run.frm[Lcd_Obj.run.page_idx].row;i++)
{
LISTVIEW_AddRow(listview,NULL);
LISTVIEW_SetItemText(listview,0,i,pItem[i].base.dp.msg[LCD_LANG_EN]);
//printf("add row %s\r\n",pItem[i].base.dp.msg[LCD_LANG_EN]);
}
break;
case PAGE_TYPE_INFO:;
struct LCD_LINE_DATA_TYPE *pData;
pData = Lcd_Obj.run.frm[Lcd_Obj.run.page_idx].data;
LISTVIEW_DeleteColumn(listview,0);
LISTVIEW_AddColumn(listview,LISTVIEW_CONTENT_WIDTH,NULL,GUI_ALIGN_LEFT|GUI_ALIGN_VCENTER);
LISTVIEW_AddColumn(listview,LISTVIEW_DATA_WIDTH,NULL,GUI_ALIGN_HCENTER|GUI_ALIGN_VCENTER);
for(int i=0;i<Lcd_Obj.run.frm[Lcd_Obj.run.page_idx].row;i++)
{
LISTVIEW_AddRow(listview,NULL);
LISTVIEW_SetItemText(listview,0,i,pData[i].base.dgp.msg[LCD_LANG_EN]);
}
fill_listview_data(listview);
break;
}
LISTVIEW_SetSel(listview,-1);
LISTVIEW_SetRowHeight(listview,LISTVIEW_ROW_HEIGHT+1);
LISTVIEW_SetRowHeight(listview,LISTVIEW_ROW_HEIGHT);
//GUI_Delay(100);
//WM_SetFocus(listview);
WM_InvalidateWindow(hWin);
WM_Update(hWin);
printf("SCREEN_Switch page index:%d\r\n",Lcd_Obj.run.page_idx);
}
|