我对 IUP 事件系统的理解有基本的困惑。现在我说的是矩阵。
这是它的创建方式:
Ihandle *create_mat(void)
{
mat = IupMatrix(NULL);
IupSetAttribute(mat, "READONLY", "YES");
IupSetCallback(mat, "CLICK_CB", (Icallback)click);
IupSetCallback(mat, "BUTTON_CB", (Icallback)button);
return mat;
}
以下是回调:
int click(Ihandle *mat, int lin, int col)
{
char* value = IupMatGetAttribute(mat, "", lin, col);
if (!value) value = "NULL";
printf("click_cb(%d, %d)\n", lin, col);
return IUP_DEFAULT;
}
int button(Ihandle *mat, int button, int pressed, int x, int y, char* status)
{
printf("button %d, %d, %d, %d %s\n", button, pressed, x, y, status);
return IUP_DEFAULT;
}
问题在于我需要激活两个回调,但在显示的情况下 CLICK 事件没有被触发。
如果我禁用 BUTTON_CB 则触发 CLICK 事件。但我需要两者,点击,左键双击,右键释放等......
这是 BUTTON_CB 排除 CLICK_CB 的正常行为还是我做错了什么?
实际上,如果提供 lin 和 col 的 CLICK_CB、ENTERITEM_CB 和 LEAVEITEM_CB 不可用(在所述情况下未触发),我将如何从矩阵的 BUTTON_CB 或 WHEEL_CB 处理程序中获取“lin”和“col”?
还有更多,我将如何从表单级别使用的事件处理程序中获得“活动控件”(名称、具有焦点的控件类型)?