Visual – MFC – LIst Control – Grid – C++

Publicado: 12 de abril de 2014 em C/C++

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.

listcontrol-programa

List Control

Visual Studio

Para usar o list Control siga os seguintes passos:

  1. Crie um novo projeto MFC Dialog Based.
  2. Arraste para o dialogo um componente List Control, use a figura abaixo para o design:

    listcontrol-design

    List Control – Design

  3. Crie uma variável para este componente chamada: m_tabela.
  4. 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);
}

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s