2013-04-11 112 views
0

通过尝试使用IUP矩阵,我发现它的使用非常直观,即使在弱电脑上它的工作速度也惊人地快。所以我看到我可以从我需要的大部分控制中获得。但是,因为IUP具有非常独特的设置属性的方式,所以我无法得到该矩阵的行为与普通多列列表或MS列表视图相似。IUP矩阵“全行选择”

这是我如何格式化:

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; 
} 

所有属性和事件回调正常工作。 因为我有一些使用/管理数据的特定方式,所以当点击任何单元格满选的行被选中或当我通过键盘改变位置时也是需要的。

我也希望能够选择带有代码的全行,就像它通过点击行标题来选择。
除了点击(我如预期捕获),如何检查矩阵上的doubleclick?

最后,不是最重要的,但它会很好地知道这里是否存在一种方法来获得系统颜色(大多是蓝色)而不是灰色选定的行?

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

回答

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; 
} 

目前还没有办法改变所选的线条颜色。其实因为它不是一种特定的颜色。被标记的单元格在前景和背景颜色处被减弱。

+1

感谢您的建议,这可以帮助我一点。由于我必须“忽略”UP/DOWN键事件并将其用于我自己的管理(从文件加载块),ENTERITEM事件不会在键盘更改行时发生。但没关系,我解决了一个问题。 “已标记”,我错过了NULL。此外,在取消内置MARKMODE后,很容易以任何颜色在矩阵中获取选定的行。是否存在任何社区(如论坛),哪些人可以及时解答IUP问题或为这样一个好的和独特的项目做出贡献? – 2013-04-12 19:56:24

+0

是的,IUP有一个邮件列表: https://lists.sourceforge.net/lists/listinfo/iup-users – 2013-04-28 20:07:48