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)