0

通过尝试使用 IUP 矩阵,我发现它的使用非常直观,即使在较弱的计算机上也能以惊人的速度运行。所以我看到我可以从我需要的大部分控制中获得。但是,由于 IUP 具有非常原始的属性设置方式,我无法让该矩阵表现得像常见的多列列表或 MS 列表视图。

这就是我的格式:

Ihandle *create_mat(void)
{
mat = IupMatrix(NULL);

IupSetAttribute(mat, "READONLY", "YES");
IupSetAttribute(mat, "HIDEFOCUS", "YES");
IupSetAttribute(mat, "FRAMECOLOR", "220 220 220");
IupSetAttribute(mat, "NUMCOL", "5");
IupSetAttribute(mat, "NUMCOL_VISIBLE", "5");
IupSetAttribute(mat, "NUMLIN", "30");
IupSetAttribute(mat, "NUMLIN_VISIBLE", "30");
IupSetAttribute(mat, "RESIZEMATRIX", "YES");
IupSetAttribute(mat, "MARKMODE", "LIN");
IupSetAttribute(mat, "MARKAREA", "CONTINUOUS");
IupSetAttribute(mat, "MULTIPLE", "NO");
IupSetAttribute(mat, "BORDER", "NO");
IupSetAttribute(mat, "CURSOR", "ARROW");
IupSetAttribute(mat, "ALIGNMENT", "ARIGHT");
IupSetAttribute(mat, "ALIGNMENT1", "ALEFT");
IupSetAttribute(mat, "ALIGNMENT5", "ACENTER");
//
IupSetAttribute(mat, "WIDTH0", "30");
IupSetAttribute(mat, "WIDTH1", "150");
IupSetAttribute(mat, "WIDTH2", "50");
IupSetAttribute(mat, "WIDTH3", "50");
IupSetAttribute(mat, "WIDTH4", "50");
//
IupSetAttribute(mat, "0:0", "Row H");
IupSetAttribute(mat, "0:1", "Col1");
IupSetAttribute(mat, "0:2", "Col2");
IupSetAttribute(mat, "0:3", "Col3");
IupSetAttribute(mat, "0:4", "Col4");
IupSetAttribute(mat, "0:5", "Col5");
//
IupSetCallback(mat, "CLICK_CB", (Icallback)click);
IupSetCallback(mat, "LEAVEITEM_CB", (Icallback)leave);
IupSetCallback(mat, "ENTERITEM_CB", (Icallback)enter);
IupSetCallback(mat, "WHEEL_CB", (Icallback)wheel);

return mat;
}

所有带有回调的属性和事件都按预期工作。由于我有一些特定的使用/管理数据的方式,因此需要在单击任何单元格的整行时被选中,或者当我也通过键盘更改位置时。

我还希望能够通过单击行标题来选择带有代码的整行。
除了单击(我按预期捕获)之外,如何检查矩阵上的双击?

最后,不是最重要的,但很高兴知道这里是否存在一种方法来获取系统颜色(主要是蓝色)而不是灰色的选定行?

如何最简单地实现该功能?
(Windows7/64)

4

1 回答 1

2

以您想要的方式选择行的最简单形式是使用 ENTERITEM_CB 回调:

static int enteritem_cb(Ihandle *ih, int lin, int col)
{
  IupSetAttribute(ih,"MARKED", NULL);  /* clear all marks */
  IupMatSetAttribute(ih,"MARK", lin, 0, "Yes");
  IupSetfAttribute(ih,"REDRAW", "L%d", lin);
  return IUP_DEFAULT;
}

当前无法更改选定的线条颜色。实际上因为它不是特定的颜色。标记的单元格在前景色和背景色处使用衰减进行绘制。

于 2013-04-12T18:38:58.493 回答