Обновление матрицы 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? (Стараюсь но безрезультатно).
Еще нет. Это будет в (ближайшей) будущей версии.