ID do artigo: 66370 - Última revisão: segunda-feira, 11 de julho de 2005 - Revisão: 4.4 ListHorz/ListHscr EXEs barra de rolagem horizontal controle caixa de listagem
Nesta páginaSumárioListHorz.exe e ListHscr.exe demonstram como controlar totalmente a barra de rolagem horizontal em uma caixa de listagem. Essa informação também está disponível em Tips.hlp, que está incluído com o Microsoft Visual C/C ++. ListHorz.exe e ListHscr.exe contêm um conjunto de funções de suporte de barra de rolagem horizontal que mantêm as extensões de todas as seqüências de caracteres na caixa de listagem e alterar a extensão de caixa de lista rolável conforme necessário. Detalhes adicionais sobre esses exemplos são encontradas na seção código de exemplo deste artigo. Mais InformaçõesOs seguintes arquivos estão disponíveis para download no Centro de download da Microsoft: ListHorz.exe
(http://download.microsoft.com/download/platformsdk/sample/1.1/w31/en-us/listhorz.exe)
ListHscr.exe
(http://download.microsoft.com/download/win31/samp34/1/w31/en-us/listhscr.exe)
Para obter informações adicionais sobre como baixar arquivos de suporte da Microsoft, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft: 119591
(http://support.microsoft.com/kb/119591/EN-US/
)
Como obter arquivos de suporte da Microsoft a partir de serviços online Microsoft examinou esse arquivo em busca de vírus. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o arquivo foi publicado. O arquivo é armazenado em servidores com segurança avançada que ajudam a evitar qualquer alteração não autorizada no arquivo. ListHorz.exe contém um aplicativo de exemplo completo demonstrando uma caixa de listagem com uma barra de rolagem horizontal. As funções de suporte necessários estão contidas em um módulo C que pode ser compilado e vinculado a qualquer aplicativo baseado no Windows. ListHscr.exe contém as fontes concluídas para uma DLL que contém as funções de suporte de caixa de lista necessário. Essas funções são exatamente os mesmos ListHorz.exe. Incluído neste arquivo é um aplicativo que usa os serviços da DLL para executar as mesmas funções que o aplicativo em ListHorz.exe. A seguir está uma estrutura de tópicos das informações apresentadas neste artigo: Suporte Windows r. para uma barra de rolagem horizontal em uma caixa de listagem
Código de exemplo g.
Suporte do Windows para barra de rolagem horizontal em uma caixa de listagemMicrosoft Windows versão 3.0 é a primeira versão que reconhece o estilo da janela WS_HSCROLL para caixas de listagem. Esse estilo adiciona uma barra de rolagem horizontal à caixa de lista. No entanto, a barra de rolagem não aparece automaticamente quando uma seqüência que é muito longo para exibir em uma caixa de listagem é adicionada à caixa de lista. Da mesma forma, quando a última seqüência de caracteres maior do que a caixa de listagem é removida, Windows não ocultar a barra de rolagem. Esse comportamento é diferente da barra de rolagem vertical de uma caixa de listagem, que é adicionada e removida conforme necessário.Um aplicativo deve manter a largura, em pixels, de cada seqüência de caracteres na caixa de listagem. A mensagem de caixa de lista LB_SETHORIZONTALEXTENT controla o intervalo de rolagem e a visibilidade de uma barra de rolagem horizontal. Neste artigo, o termo "extensão" é definido para ser a largura de um objeto em pixels de tela. Cada seqüência de caracteres tem uma extensão como faz a caixa de listagem. As outras seções deste artigo fornecem que informações mais detalhadas sobre considerações especiais que devem ocorrer ao lidar com barras de rolagem horizontal nas caixas de lista. Novas mensagens de caixa de lista: LB_SETHORIZONTALEXTENT e LB_GETHORIZONTALEXTENTDuas mensagens foram adicionadas ao Windows 3.0 para oferecer suporte a barras de rolagem horizontal em caixas de listagem:
Message Description
-------------------------------------------------------------------
LB_SETHORIZONTALEXTENT Sets the width in pixels by which a list
box can be scrolled to the value of wParam
in the message.
LB_GETHORIZONTALEXTENT Retrieves the width in pixels by which a
list box can be scrolled.
No entanto, a mensagem LB_SETHORIZONTALEXTENT não afeta a visibilidade de uma barra de rolagem horizontal. Se uma barra de rolagem estiver visível, enviar esta mensagem com uma pequena extensão especificada não removerá. Da mesma forma, se uma barra de rolagem não estiver presente, enviar esta mensagem com uma grande extensão não criará um. As próximas duas seções deste artigo explicam como adicionar e remover uma barra de rolagem horizontal como seqüências de caracteres são adicionadas e excluídas. O ponto principal é que Windows somente será Mostrar ou ocultar a barra quando uma seqüência de caracteres é adicionada, inserida ou excluída de rolagem. Tornando a barra de rolagem visíveis ao adicionar ou inserir uma StringQuando é uma seqüência de caracteres com uma extensão maior largura de caixa de listagem a ser adicionado, um aplicativo deve enviar a mensagem LB_SETHORIZONTALEXTENT antes de enviar um LB_ADDSTRING ou LB_INSERTSTRING mensagem.Durante o processo de adicionar ou inserir uma seqüência de caracteres, o Windows compara a extensão de barra de rolagem horizontal armazenada na caixa de listagem para a largura de na área cliente da caixa de lista. Se a extensão de área do cliente for menor que a extensão de barra de rolagem, a barra de rolagem é tornada visível na próxima vez na lista caixa é desenhada. Largura de caixa de listagem área cliente não inclui a largura da barra de rolagem vertical, se ele estiver visível. Considere uma caixa de listagem sem uma barra de rolagem vertical, que é preenchida com seqüências de caracteres. Cada uma destas seqüências de caracteres é um pouco mais estreita do que a caixa de listagem. Quando outra seqüência de caracteres é adicionada, e a barra de rolagem vertical é causada apareça, Windows descobre que a extensão de barra de rolagem horizontal é agora maior do que a largura da caixa de listagem e adiciona uma barra de rolagem horizontal. Se a extensão de barra de rolagem é menor que a largura da área cliente da caixa de listagem, o status da barra de rolagem permanece inalterado. Se a caixa de listagem não é desenhada depois que a seqüência de caracteres é adicionada, a barra de rolagem não aparecerá. Portanto, se a mensagem WM_SETREDRAW é usada para desativar o redesenho de tela, adicionar uma seqüência de caracteres não mostrará a barra de rolagem horizontal até que a caixa de listagem é redesenhada. Ocultar a barra de rolagem ao excluir um StringWindows remove apenas a barra de rolagem horizontal durante o processamento de uma mensagem LB_DELETESTRING. Portanto, se a seqüência a ser excluído for mais longa na caixa de listagem, a extensão de barra de rolagem horizontal deve ser alterada para o próximo menor valor de extensão antes que essa seqüência é excluída. Depois que a seqüência de caracteres for excluída, o Windows compara a extensão de barra de rolagem armazenado para a largura da área cliente da caixa de listagem e, se a extensão for menor, a barra de rolagem é removida.Se a caixa de listagem não é desenhada depois a seqüência de caracteres é excluída, a barra de rolagem não desaparecerá. Portanto, se a mensagem WM_SETREDRAW é usada para desativar o redesenho de tela, excluir uma seqüência de caracteres não removerá a barra de rolagem horizontal até que a caixa de listagem é redesenhada. No entanto, se a caixa de lista é rolada para a direita pouco quanto um pixel, a barra de rolagem permanecerá visível, independentemente da extensão que está definida. Isso é feito para que o usuário sempre possa rolar para a extrema esquerda. Se a barra de rolagem foi removida, a caixa de listagem pode ficar em um estado onde ele é rolado para a direita por algum valor sem qualquer maneira para rolar para trás completamente para a esquerda. Para contornar este problema, sempre Role caixa de listagem para a esquerda antes de excluir a seqüência mais longa. Se uma seqüência de caracteres mais curta for excluída, a extensão permanecerá a mesma e a barra de rolagem horizontal mesmo assim não será afetada. Role a caixa de listagem somente se a seqüência mais longa está sendo excluída. A caixa de listagem pode ser scrolled ou completamente para a esquerda (no caso em que uma seqüência longa ainda existe na caixa de listagem) ou apenas suficiente para que a próxima seqüência de caracteres mais longa estiver visível, supondo que a caixa de listagem requer uma barra de rolagem. O código de exemplo na biblioteca de software (descrito acima) sempre rola a caixa de listagem completamente à esquerda, usando a mensagem WM_HSCROLL, da seguinte maneira:
Calcular extensões horizontais de seqüências de caracteresA discussão anterior sobre menciona as extensões de seqüências de caracteres, mas fornece não métodos para determinar esses valores.Extensões de pixel de seqüências de caracteres são calculadas pela função GetTextExtent. Isso é uma chamada GDI que soma os pixels de largura de cada caractere em uma seqüência usando a fonte selecionada no momento em um contexto de exibição representado por um hDC. Se lpString contém uma seqüência de representante e hWndListBox é o identificador de janela para a caixa de listagem, as seguintes etapas são necessárias para determinar o tamanho de cada seqüência de caracteres:
O campo tmAveCharWidth na estrutura TEXTMETRIC fornece vários consistente de pixels para adicionar o comprimento da seqüência de caracteres, não importa qual fonte está em uso no momento. Este espaço de buffer impede que as seqüências de caracteres que está sendo cortado. Como uma observação lado, o valor de tmAveCharWidth é o número de pixels pelo qual a caixa de lista é rolada horizontalmente quando as setas da barra de rolagem são clicadas. Se uma fonte de pitch fixo for usada, a caixa de listagem é rolada horizontalmente por um caractere para cada clique. Manutenção de todas as extensões na caixa de listagemMuitos métodos possíveis podem ser usados para manter uma lista de extensões das seqüências na caixa de listagem. Um dos métodos mais convenientes é que usar listas de propriedades, como mostrado no código de exemplo.Cada janela possui uma lista propriedade associada a ele. Cada propriedade é uma seqüência de caracteres e um identificador de dados associada. Uma janela armazena e recupera cada alça de dados usando a seqüência que rotula a alça. Uma lista classificada de extensões para seqüências de caracteres na caixa de listagem pode ser salvas em um objeto de memória local ou global. Isso permite que cada janela manter sua própria lista e não requer que o aplicativo manter um mapeamento na caixa de listagem para a alça de dados propriamente dita. A lista de extensões deve ser classificada em ordem decrescente, para que seja a primeira extensão na lista que a seqüência mais longa na caixa de listagem. Também permite manter essa lista classificada que o aplicativo usar uma pesquisa binária para localizar uma extensão na lista quando um está sendo inserido ou excluído. Quando uma nova seqüência é adicionada, insira a extensão da cadeia de caracteres na lista, manter a ordem de classificação. Se a nova extensão for colocada na parte superior da lista, envie uma mensagem LB_SETHORIZONTALEXTENT à caixa de listagem especificando a nova extensão. Não envie a mensagem para uma extensão não é o maior. Quando uma seqüência de caracteres é excluída, remova a extensão da cadeia de caracteres da lista. Se a extensão for o primeiro na lista, então, essa seqüência é a mais longa na caixa de listagem. Nesse caso, envie um LB_SETHORIZONTALEXTENT para a caixa de lista especificando a próxima extensão maior na lista. Se uma seqüência menor for excluída, não envie a mensagem. Quando uma mensagem LB_RESETCONTENT é usada, desmarque a lista inteira de extensões. Enviar uma mensagem LB_SETHORIZONTALEXTENT especificando uma extensão de 0 (zero), seguida por um LB_DELETESTRING conforme descrito na última parte da seção acima intitulado "Ocultar a barra de rolagem ao excluir um String." Código de exemploComo mencionado acima, existem dois arquivos na biblioteca de software da Microsoft: LISTHORZ e LISTHSCR. Cada um desses exemplos fornece cinco funções de suporte que facilitam muito a manutenção das barras de rolagem horizontal nas caixas de lista.Em LISTHORZ, essas funções são encontradas no arquivo LISTHELP.C. Este arquivo pode ser compilado separadamente e vinculado a um aplicativo. LISTHSCR contém os arquivos de origem para uma DLL que fornece essas cinco funções de suporte. O arquivo C para a DLL é exatamente o mesmo do LISTHORZ, exceto que seu nome foi alterado. Este arquivo também inclui um programa LISTHORZ que usa os serviços da DLL para executar as mesmas funções que o programa em outro arquivo. O arquivo LISTHAPI.H é o arquivo de inclusão contendo protótipos de funções exportadas pela DLL. Também há uma biblioteca de importação, LISTHSCR.LIB, gerado pelo makefile. A DLL é mais útil porque ele pode oferece suporte a barras de rolagem horizontal em qualquer número de caixas de listagem em qualquer número de aplicativos. O restante deste artigo documenta as funções de suporte: Parâmetros: hList HWND identificador à caixa de listagem que irá usar uma barra de rolagem horizontal. Valor de retorno: BOOL VERDADEIRO se houver erros, FALSO se não foi possível alocar memória. BOOL FFreeListboxExtents(HWND hList) Libera a memória alocada para a lista de extensão de caixa de listagem identificada por hList. A propriedade que armazena o identificador de memória definido pelo FInitListboxExtents é removida. Esta função deve ser chamada quando a caixa de listagem está sendo destruída. Parâmetros: hList HWND identificador à caixa de lista que foi usada anteriormente com valor de retorno FInitListboxExtents: BOOL VERDADEIRO se houver erros, FALSO se a memória não pôde ser liberada, caso em que a propriedade não é removida. Parâmetros: hList HWND identificador à caixa de listagem será redefinida. Valor de retorno: nenhum Esta função deve ser chamada antes da seqüência de caracteres a é adicionada à caixa de listagem com LB_ADDSTRING ou LB_INSERTSTRING. Parâmetros: hList HWND identificador à caixa de listagem para a qual a seqüência de caracteres deve ser adicionado. psz ponteiro LPSTR a seqüência de caracteres que é a ser adicionado. Esta função deve ser chamada antes que a seqüência de caracteres é adicionada para que a barra de rolagem horizontal será mantida adequadamente. Valor de retorno: WORD um desses três valores: 0 se a seqüência de caracteres adicionada não era a seqüência mais longa na caixa de listagem e a visibilidade da barra de rolagem horizontal não foi alterado. A extensão da seqüência adicionada, se a seqüência adicionada foi a mais longa e pode ter alterado a visibilidade da barra de rolagem. -1 para um erro. Esta função deve ser chamada antes que uma mensagem LB_DELETESTRING é enviada à caixa de listagem. Parâmetros: hList HWND identificador à caixa de listagem partir da qual uma seqüência de caracteres é a ser removido. iSel WORD índice da seqüência de caracteres a ser removido. Valor de retorno: WORD um desses três valores: 0 se a seqüência de caracteres removido não era mais longa na caixa de listagem e a visibilidade da barra de rolagem horizontal não alterou a extensão de seqüência de caracteres excluída, se a seqüência de excluído era mais longa e pode ter alterado a visibilidade da barra de rolagem. -1 para um erro. A informação contida neste artigo aplica-se a:
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: 66370
(http://support.microsoft.com/kb/66370/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