4 апреля 2009
Задача: создать таблицу с данными в visual studio - mfc - на c++ и забить ее данными.

Решение:

Проблема вся в том, что у нас отсутствует какой-нибудь специальный контрол для создания таблиц (например. 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 строк, чуть позже был найден универсальный вариант решения данной задачи, который и представлен в данной заметке.
#1. alex
7.09.2009 - 12:45
спасибо smile3
#2. tsbwn
2.05.2010 - 11:12
:В спасибо!
smile3 biggrin wink cool sad blush up