0

我正在尝试使用 C 中的 IUP 矩阵,就像我使用 VB 中的 DataGrid 一样。
直到现在我来到这个:

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)像普通的windows Grid这样使用IUP矩阵是个好主意吗?
2)如何调用刷新矩阵来更改其中的数据而不会失去速度?
3) IUP 可以像 gtk 一样在 Windows 上使用 UTF-8 字符串吗?(我尝试但没有结果)。

4

1 回答 1

1

1)像普通的windows Grid这样使用IUP矩阵是个好主意吗?

是的。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);

您只需要第二部分的字符串转换。

另外,您是否检查过 temp 变量是否具有有效索引?

3) IUP 可以像 gtk 一样在 Windows 上使用 UTF-8 字符串吗?(我尝试但没有结果)。

还没有。它将在(近期)将来的版本中。

于 2013-04-10T01:15:47.780 回答