我正在尝试使用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“整数来改变。
所以我称“重画”为“全部”,但也没有结果,开始的数据保留在矩阵中。
由于我完全是初学者,请回答几个问题。
1)像普通的windows Grid一样使用IUP矩阵是个好主意吗?
2)如何在不损失速度的情况下调用刷新矩阵来改变其中的数据?
3) IUP可以像gtk一样在windows上使用UTF-8字符串吗?(我尝试了,但没有结果)。
发布于 2013-04-10 09:15:48
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字符串吗?(我尝试了,但没有结果)。
还没。它将在(不久的)将来的版本中出现。
https://stackoverflow.com/questions/15912146
复制相似问题