O Controle de lista para MFC, o List Control da classe, CListrCtrl é amplamente utilizado na aplicação GUI, pois suporta relatório de lista de exibição. Isso permite que os usuários tenham de linhas e colunas que simulam como funcionalidade uma grade de dados.
CListCtrl
Use um controle de lista para exibir qualquer arranjo de ícones com rótulos, como no File Explorer, ou listas de colunas de texto, com ou sem ícones. Para uma descrição das quatro possíveis “vistas” (não confundir com vistas MFC), você pode ter em um controle de lista – exibição de ícones, exibição em tamanho pequeno ícone, exibição de lista, e exibição de relatório.
Visual Studio
Para usar o list Control siga os seguintes passos:
- Crie um novo projeto MFC Dialog Based.
- Arraste para o dialogo um componente List Control, use a figura abaixo para o design:
- Crie uma variável para este componente chamada: m_tabela.
- No evento de inicialização OnInital, complete seu código gerado automaticamente com os trechos marcados do código abaixo:
Exemplo:
Neste exemplo usamos um List Control para simular uma grade de dados.
C++
// Código gerado automaticamente
// gridcppDlg.cpp : implementation file
//
#include "stdafx.h"
#include "gridcpp.h"
#include "gridcppDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CgridcppDlg::CgridcppDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CgridcppDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CgridcppDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_tabela);
}
BEGIN_MESSAGE_MAP(CgridcppDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()
BOOL CgridcppDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
// Desenvolvimento Aberto
// nosso código começa aqui.
// Define tipo de visualização para detalhes
m_tabela.SetView(LV_VIEW_DETAILS);
// Insere colunas
m_tabela.InsertColumn(0, L"Album", LVCFMT_LEFT, 90, -1);
m_tabela.InsertColumn(1, L"Artista", LVCFMT_LEFT, 110, -1);
m_tabela.InsertColumn(2, L"Musica", LVCFMT_LEFT, 120, -1);
m_tabela.InsertColumn(3, L"Ano", LVCFMT_LEFT, 50, -1);
m_tabela.InsertColumn(4, L"VideoClip", LVCFMT_LEFT, 80, -1);
// Define visual para grid
m_tabela.SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRIDLINES);
// Cria item
LVITEM lvItem;
// cria estrutura para inserir o item
typedef struct _LVITEM {
UINT mask;
int iItem;
int iSubItem;
UINT state;
UINT stateMask;
LPTSTR pszText;
int cchTextMax;
int iImage;
LPARAM lParam;
#if (_WIN32_IE >= 0x0300)
int iIndent;
#endif
} LVITEM, FAR *LPLVITEM;
// Define variaveis de itens
int InsertItem(const LVITEM* pItem);
int nItem;
// Insere linha
lvItem.mask = LVIF_TEXT;
lvItem.iItem = 0;
lvItem.iSubItem = 0;
lvItem.pszText = L"Nevermind";
nItem = m_tabela.InsertItem(&lvItem);
// Insere colunas
m_tabela.SetItemText(nItem, 1, L"Nirvana");
m_tabela.SetItemText(nItem, 2, L"Smell Like Teen Spirit");
m_tabela.SetItemText(nItem, 3, L"1991");
m_tabela.SetItemText(nItem, 4, L"Sim");
// Insere linha 2
lvItem.mask = LVIF_TEXT;
lvItem.iItem = 0;
lvItem.iSubItem = 0;
lvItem.pszText = L"Ten";
nItem = m_tabela.InsertItem(&lvItem);
// Insere colunas
m_tabela.SetItemText(nItem, 1, L"Pearl Jam");
m_tabela.SetItemText(nItem, 2, L"Jeremy");
m_tabela.SetItemText(nItem, 3, L"1991");
m_tabela.SetItemText(nItem, 4, L"Sim");
// Insere linha 3
lvItem.mask = LVIF_TEXT;
lvItem.iItem = 0;
lvItem.iSubItem = 0;
lvItem.pszText = L"Badmotorfinger";
nItem = m_tabela.InsertItem(&lvItem);
// Insere colunas
m_tabela.SetItemText(nItem, 1, L"SoundGarden");
m_tabela.SetItemText(nItem, 2, L"Outshined");
m_tabela.SetItemText(nItem, 3, L"1991");
m_tabela.SetItemText(nItem, 4, L"Sim");
// Insere linha 4
lvItem.mask = LVIF_TEXT;
lvItem.iItem = 0;
lvItem.iSubItem = 0;
lvItem.pszText = L"Sweet Oblivion";
nItem = m_tabela.InsertItem(&lvItem);
// Insere colunas
m_tabela.SetItemText(nItem, 1, L"Screaming Trees");
m_tabela.SetItemText(nItem, 2, L"Nearly I Lost You");
m_tabela.SetItemText(nItem, 3, L"1993");
m_tabela.SetItemText(nItem, 4, L"Sim");
// Insere linha 5
lvItem.mask = LVIF_TEXT;
lvItem.iItem = 0;
lvItem.iSubItem = 0;
lvItem.pszText = L"Core";
nItem = m_tabela.InsertItem(&lvItem);
// Insere colunas
m_tabela.SetItemText(nItem, 1, L"Stone Temple Pilots");
m_tabela.SetItemText(nItem, 2, L"Plush");
m_tabela.SetItemText(nItem, 3, L"1992");
m_tabela.SetItemText(nItem, 4, L"Sim");
return TRUE;
}
void CgridcppDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
HCURSOR CgridcppDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}



