ID do artigo: 250614 - Última revisão: terça-feira, 21 de novembro de 2006 - Revisão: 1.2 Como classificar itens em um CListCtrl no modo de exibição relatório
SumárioNão a quantidade de informações foi fornecido para o processo de classificação dos itens em um controle ListView, especialmente um quebradas pela classe CListCtrl MFC. Os detalhes são fáceis de implementar e este artigo tenta preencher a lacuna na documentação para este recurso útil. O código de exemplo representa uma caixa de diálogo MFC com um controle de lista definido como o estilo LVS_REPORT. Mais InformaçõesPara classificar os itens em um controle ListView, deve haver uma estrutura LVITEM associada ao item. MFC fornece isso para o desenvolvedor, permitindo que um item a ser inserido com uma chamada de função InsertItem(int nItem, LPCTSTR lpszItem) simples que cria a estrutura com padrões razoáveis. Um buffer de complexidade subjacente às vezes pode ser enganoso. No entanto, a estrutura LVITEM é uma chave importante para manipular itens ListView, incluindo o mecanismo de classificação. O elemento lParam LVITEM fornece informações necessárias. Quando a função SortItems de classe CListCtrl é chamada, ele deve fornecer um ponteiro de função para uma função de retorno de chamada de classificação e um valor DWORD definido pelo aplicativo. Durante a classificação, a função de retorno de chamada é invocada repetidamente como dois itens do controle de lista são selecionados para comparação. Os parâmetros que recebe são o elemento lParam da estrutura LVITEM cada item, e o valor DWORD passado pela chamada SortItems . O código a seguir representa um exemplo simples de classificar uma lista de dez EUA presidentes em um controle ListView. Os presidentes inicialmente são armazenados em uma matriz de CString multidimensional estática. A função de classificação de retorno de chamada pode ser definida estaticamente, como um membro de uma classe ou, como aqui, simplesmente como uma função global: O elemento lParam pode ser desde simples para altamente complexas. Com freqüência, uma estrutura é útil neste contexto, permitindo que várias partes de dados para ser referenciado. Neste exemplo, uma estrutura chamada ITEMDATA foi definida para conter os três elementos que compõem um determinado item: Neste exemplo, a estrutura tiver sido definida no arquivo de cabeçalho de uma classe CDialog e uma variável de membro de um ponteiro para uma matriz de 10 foi definida: Um controle ListView foi adicionado a uma caixa de diálogo e uma variável de membro definida chamado m_ctlListView. Os itens foram adicionados ao OnInitDialog : Três colunas foram inseridas para o último nome, nome e termo do escritório. Em seguida, para cada um dos dez itens, uma nova estrutura ITEMDATA é alocada e inicializada da matriz CString. O item é inserido muito simples, usando somente o índice e a última seqüência de nome, em seguida, o texto é definido para as outras duas colunas do item. Finalmente, a função SetItemData é chamado, passando o novo ITEMDATA como um parâmetro. Reinicializa o lParam da estrutura LVITEM do item e prepara a forma para a classificação. MFC no Visual C++ 6.0 tem um problema com notificações de cabeçalho para o controle ListView. Embora possa ser adicionado a um manipulador, na versão atual ele não é chamado. Por exemplo, use o Assistente de classe ou o WizardBar para adicionar um manipulador de mensagem do Windows. Se a identificação do controle ListView estiver realçada, um número de mensagens de notificação está disponível para seleção. Para classificar os itens quando o cabeçalho é clicado para uma determinada coluna, selecione notificação HDN_ITEMCLICK . Uma entrada de mapa de mensagem ON_NOTIFY é gerada, bem como uma função de manipulador. Por exemplo atual, a entrada aparece da seguinte maneira: O problema aqui é que a notificação, na verdade, não se originam do controle ListView; em vez disso, o controle de cabeçalho criado por ListView envia a notificação. A entrada de mapa de mensagem acima não funciona. A correção é simples, no entanto, como o controle de cabeçalho sempre tem uma identificação de 0, a macro pode ser editada para funcionar corretamente: Em seguida, no manipulador OnItemclickList1, é feita a chamada SortItems : O cabeçalho de mensagem de notificação ( NMHDR ) é, na verdade, uma notificação de ListView, NMLISTVEIW , que contém o índice para a coluna que foi clicado. Neste exemplo, é representado por iItem . Listas mais complexas pode ser necessário consultar o elemento iSubItem bem dessa estrutura. O endereço da função de retorno de chamada é passado para SortItems , juntamente com o número da coluna que foi clicado. A rotina SortFunc é chamada repetidamente conforme pares de itens de ListView são passados para a função para comparação. Os primeiros dois parâmetros são o elemento lParam da estrutura LVITEM dos respectivos itens e o terceiro parâmetro (definido por aplicativo) é o número de coluna fornecido na chamada SortItems . O índice de coluna passado lParamSort determina qual elemento dos objetos ITEMDATA passado lParam1 e lParam2 deve ser usado para comparação. O resultado é retornado e o processo continua até que todos os itens tenham sido classificados. Como um lembrete, as estruturas ITEMDATA que foram alocadas para os itens da lista precisa eventualmente ser destruído. Neste exemplo, o manipulador WM_DESTROY para a caixa de diálogo itera através os elementos de membro e exclui-los. ReferênciasPara obter mais informações no controle ListView comuns, consulte a documentação SDK em Controles comuns do Windows na seção Serviços de interface do usuário .
Tradução automáticaIMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado. Clique aqui para ver a versão em Inglês deste artigo: 250614
(http://support.microsoft.com/kb/250614/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesTraduções deste artigo |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email



Voltar para o início