Пытаясь использовать матрицу 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)