Иногда нужно отобразить данные ввиде сетки, а в Windows нет нативной сетки, проблема решается засчёт ListView ну или CListCtrl:
Итак погнали...
1. Создадим проект MFC AppWizard и назавём MFCGrid:
2. Выберим Dialog Based:
3. Оставим 3D Controls, а заголовок окна пусть будет Grid Demo:
4. Назовём элементы управления как показано:
5. Добавим переменные:
6. Добавим события:
7. Настроем компонент CListCtrl, View должно быть Report:
Добавим в MFCGridDlg.h переменную int counter:
class CMFCGridDlg : public CDialog
{
private:
int counter;
};Добавить код в MFCGridDlg.cpp:
BOOL CMFCGridDlg::OnInitDialog()
{
// TODO: Add extra initialization here
m_People.InsertColumn(1, "ID", LVCFMT_LEFT, 100, -1); // Добавляем колонку ID
m_People.InsertColumn(2, "Firstname", LVCFMT_LEFT, 100, 1); // Добавляем колонку Firstname
m_People.InsertColumn(2, "Lastname", LVCFMT_LEFT, 100, 1); // Добавляем колонку Lastname
this->counter = 0;
}
void CMFCGridDlg::OnBtnAdd()
{
// TODO: Add your control notification handler code here
CString firstname; // Хранится имя
CString lastname; // Хранится фамилия
CString id; // Хранится Id
// Проверяет если имя и фамилия содержит меньше символов, то отображает alert с сообщением
if(m_Firstname.GetWindowTextLength() < 3 || m_Lastname.GetWindowTextLength() < 3) {
AfxMessageBox("Firstname or Lastname must greater then 2 characters", MB_OK | MB_ICONEXCLAMATION);
return;
}
m_Firstname.GetWindowText(firstname); // Считывет текст из поле Firstname и помещает в переменную firstname
m_Lastname.GetWindowText(lastname); // Считывет текст из поле Lastname и помещает в переменную lastname
this->counter++; // Увеличиваем счётчик
id.Format("%d", this->counter); // Форматируем, и вставляем в строку
int item = m_People.InsertItem(this->counter, id); // Добавляем новую строку в сетку
m_People.SetItemText(item, 1, firstname); // Добавляем в соседне поле имя
m_People.SetItemText(item, 2, lastname); // Добавляем в соседне поле фамилию
m_Firstname.SetWindowText(""); // Очищаем поле
m_Lastname.SetWindowText(""); // Очищаем поле
}
void CMFCGridDlg::OnBtnRemove()
{
// TODO: Add your control notification handler code here
m_People.DeleteItem(0); // Это сделаю позже
}
С OnBtnRemove я займусь позже, вуаля вот и результат:



