Решение:
Проблема вся в том, что у нас отсутствует какой-нибудь специальный контрол для создания таблиц (например. data grid в dotnet), поэтому будет пользоваться тем, что у нас есть. А есть у нас замечательный, универсальный контрол - List Control. Как и в каких режимах можно узнать заглянув в google. А я расскажу как решить поставленную задачу. Итак, начнем.
Загружаем студию, создаем проект (MFC, я выбрал класс CMainFrame).
Добавляем какой-нибудь даиалог, добавляем ему класс, добавляем ему событие oninitdialog() если оно не создано автоматически, далее в хидере вновь созданного класса объявляем переменную:
CListCtrl list; // Переменная класса CListCtrl это и есть наш список :)
Теперь неободимо инициализировать наш список, создать колонки и добавить данные, так сделаем это!
Переходим в OnInitDialog();
Пишем:
list.Create
(
WS_BORDER | WS_CHILD | WS_VISIBLE | LVS_REPORT |
LVS_SINGLESEL | LVS_SHOWSELALWAYS,
CRect(25, 120, 1020, 500),
this,
0x100
);
Что есть что: первое это стили, нас интересует LVS_REPORT этот параметр говорит о том что список работает в режиме отчета (report), циферки 25 - откуда рисуем по оси Х, 120 - откуда по оси Y, 1020 - ширина, 500 - высота. Остальное особо не имеет значения, вернее имеет, но кому надо посмотрят в msdn :)
Создаем колонки:
list.InsertColumn(0, "Id", LVCFMT_LEFT, -1, 0);
list.InsertColumn(1, "Name", LVCFMT_LEFT, -1, 0);
0,1 - позиция
id, Name - название колнонки
Добавляем строки:
int Index;
1. Index = list.InsertItem(LVIF_TEXT, 0, "1", 0, 0, 0, NULL);
2. list.SetItem(Index, 1, LVIF_TEXT, "Aleksey", 0, 0, 0, NULL);
Думаю все понятно, для других строку делается все аналогично, меняем в 2 строчке кода LVIF_TEXT, 0, на LVIF_TEXT, 1, - получаем вторую строку и т.д
Еще одно совсем забыл, косметическое дополнение, для того чтобы задать ширину столбца необходимо сделать следующее:
list.SetColumnWidth(0,110);
Где 0 - номер колонки, а 110 - ширина в пикселсах.
Первое знакомство и добавление 7 категорий в List Control заняло у меня 70 строк, чуть позже был найден универсальный вариант решения данной задачи, который и представлен в данной заметке.
