Обновление матрицы IUP

Я пытаюсь использовать матрицу IUP из C, как я использую DataGrid из VB.
До сих пор я прихожу к этому:

int refreshl(Ihandle *mat, int from)  
{  
struct lotstruct lot;   

FILE *fol;
fol = fopen("C:/myfolder/myfile", "rb+");

int b;
int temp = 1;
for (b=from; b<(from+31); b++)
{
    int rec = sizeof(lot) * (b - 1);
    fseek(fol, rec, SEEK_SET);

    int fr;
    fr = fread(&lot, sizeof(lot), 1, fol);
    //------------------------------------
    char k1[36] = {0};
    strncpy(k1, lot.str1, 35);
    char* tp = ibm852_to_cp1250(k1);

    char row[6] = {0};
    sprintf(row, "%d", temp);
    char* ro = ibm852_to_cp1250(row);

    char cel1[10] = {0};
    sprintf(cel1, "%d%s", temp, ":0");
    IupSetAttribute(mat, cel1, ro);

    char cel2[10] = {0};
    sprintf(cel2, "%d%s", temp, ":1");
    IupSetAttribute(mat, cel2, tp);
    temp += 1;
}
fclose(fol);
IupSetAttribute(mat, "REDRAW", "ALL");

return 0;
}

При этом я читаю данные из двоичного файла и вижу данные на консоли. Но mytrix не обновляется при изменении данных. Данные изменяются функцией k_any + case K_DOWN путем увеличения целого числа "from".
Поэтому я называю "REDRAW" "ALL", но также безрезультатно, начальные данные остаются в матрице.

Поскольку я начинающий, пожалуйста, ответьте на несколько вопросов.

1) Это хорошая идея использовать матрицу IUP, как обычные окна Grid?
2) Как вызвать обновление матрицы для изменения данных в ней без потери скорости?
3) Может ли IUP работать со строками UTF-8 на окнах, как может gtk? (Стараюсь но безрезультатно).

1 ответ

Решение

1) Это хорошая идея использовать матрицу IUP, как обычные окна Grid?

Да. IupMatrix именно для этого.

2) Как вызвать обновление матрицы для изменения данных в ней без потери скорости?

Ваш код правильный. Возможно, вы обновляете не ту ячейку в IupMatrix. L=0 или C=0 являются ячейками заголовка и существуют, если выполняются определенные условия. Может быть, вы хотите установить L=1 или C=1.

Предложение вместо этого:

char row[6] = {0};
sprintf(row, "%d", temp);
char* ro = ibm852_to_cp1250(row);
char cel1[10] = {0};
sprintf(cel1, "%d%s", temp, ":0");
IupSetAttribute(mat, cel1, ro);

Попробуй это:

IupMatSetfAttribute(mat, "", temp, 0, "%d", temp);

и IupMatStoreAttribute(mat, "", temp, 1, tp);

Вам нужно только преобразование строки для второй части.

Кроме того, вы проверили временную переменную, если у нее есть действительный индекс?

3) Может ли IUP работать со строками UTF-8 на окнах, как может GTK? (Стараюсь но безрезультатно).

Еще нет. Это будет в (ближайшей) будущей версии.

Другие вопросы по тегам