|

楼主 |
发表于 2022-2-8 16:08:34
|
显示全部楼层
几百条也不应该卡死吧?这个控件是否存在BUG?我的代码如下:
首先是控件的配置:
hItem = WM_GetDialogItem(hWin, GUI_ID_LISTVIEW0);
LISTVIEW_SetFont(hItem, GUI_FONT_13_ASCII);
LISTVIEW_SetBkColor(hItem, LISTVIEW_CI_UNSEL, GUI_WHITE);
LISTVIEW_SetBkColor(hItem, LISTVIEW_CI_SELFOCUS, GUI_BLACK);
LISTVIEW_SetTextColor(hItem, LISTVIEW_CI_UNSEL, GUI_BLACK);
LISTVIEW_SetTextColor(hItem, LISTVIEW_CI_SELFOCUS, GUI_YELLOW);
LISTVIEW_SetWrapMode(hItem, GUI_WRAPMODE_WORD);
LISTVIEW_SetAutoScrollH(hItem, 1);
LISTVIEW_SetAutoScrollV(hItem, 1);
LISTVIEW_SetRowHeight(hItem, 20);
LISTVIEW_SetHeaderHeight(hItem, 32);
LISTVIEW_AddColumn(hItem, 56, "时间", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 50, "焊点号", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 48, "规范号", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电流\nRMS1", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电流\nPEK1", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电流\nRMS2", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电流\nPEK2", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电流\nRMS3", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电流\nPEK3", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电压\nRMS1", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电压\nPEK1", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电压\nRMS2", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电压\nPEK2", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电压\nRMS3", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电压\nPEK3", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "功率\nRMS1", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "功率\nRMS2", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "功率\nRMS3", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电阻\nRMS1", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电阻\nRMS2", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "电阻\nRMS3", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "压力\nAVR1", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "压力\nAVR2", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "压力\nAVR3", GUI_TA_HCENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hItem, 46, "位移", GUI_TA_HCENTER | GUI_TA_VCENTER);
然后是打开数据并加入表格的函数:
void OpenDateBase(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
WM_HWIN hItem;
FILE *fp;
char buf1[10], buf2[10], buf[50];
char *p;
unsigned int row = 0;
unsigned int col = 0;
char sel = 0;
int i;
U32 size;
osSemaphoreAcquire(BinarySemFileHandle, osWaitForever);
sprintf(buf, "N0:\\20%02d%02d%02d.csv",
GetDate.Year, GetDate.Month, GetDate.Date);
fp = fopen(buf, "r");
hItem = WM_GetDialogItem(hWin, GUI_ID_LISTVIEW0);
LISTVIEW_DeleteAllRows(hItem);
if(fp != NULL)
{
fseek(fp, 0L, SEEK_END);
size = ftell(fp);
if(size > 100000)
{
fseek(fp, size-100000, SEEK_SET);
}
else
{
fseek(fp, 0L, SEEK_SET);
}
fgets(buf_read, MAX_READ-1, fp); //读取头部注释字符
// while(fgetc(fp) != '\n') ;
sprintf(buf1, "%02d:%02d:%02d", GetTime1.Hours, GetTime1.Minutes, GetTime1.Seconds);
sprintf(buf2, "%02d:%02d:%02d", GetTime2.Hours, GetTime2.Minutes, GetTime2.Seconds);
LISTVIEW_EnableMotion(hItem, 1);
while (fgets(buf_read, MAX_READ-1, fp) != NULL && row <= 1000)
{
buf_read[MAX_READ-1] = 0;
col = 0;
p = buf_read;
while(*p != NULL && *p != '\n')
{
sel = 0;
while(*p != NULL && *p != ',')
{
if(sel >= 20-1) break;
SetBuf[sel++] = *p++;
}
SetBuf[sel] = 0;
p++;
if(col == 0 && strcmp(SetBuf, buf1) < 0) break;
if(col == 0 && strcmp(SetBuf, buf2) > 0)
{
fclose(fp);
osSemaphoreRelease(BinarySemFileHandle);
return;
}
if(col == 0) LISTVIEW_InsertRow(hItem, 0, NULL);
if(col <= (MAX_SAVE_NUM) - 1)
{
LISTVIEW_SetItemText(hItem, col, 0, SetBuf);
}
else
{
if(strcmp(SetBuf, "0") == 0)
{
for(i = 0; i <= (MAX_SAVE_NUM) - 1; i++)
LISTVIEW_SetItemBkColor(hItem, i, 0, LISTVIEW_CI_UNSEL,GUI_LIGHTRED);
}
}
col++;
if(col > (MAX_SAVE_NUM)) break;
}
if(col > 0)
{
row++;
}
}
fclose(fp);
}
osSemaphoreRelease(BinarySemFileHandle);
}
硬汉兄可以试试。。 |
|