Artigo: 66370 - Última revisão: segunda-feira, 11 de Julho de 2005 - Revisão: 4.4 Caixa de listagem ListHorz/ListHscr EXEs barra de deslocamento horizontal controlo
Nesta páginaSumárioListHorz.exe e ListHscr.exe demonstram como controlar totalmente o barra de deslocamento horizontal na caixa de listagem. Estas informações também estão disponíveis no Tips.hlp, incluído com o Microsoft Visual C/C ++. ListHorz.exe e ListHscr.exe contêm um conjunto de suporte de funções de barra de deslocamento horizontal que mantêm as extensões de todos os textos na caixa de listagem e alterar a extensão de caixa de lista de barra de deslocamento conforme necessário. Obter detalhes adicionais sobre estes exemplos são localizadas na secção códigos de exemplo deste artigo. Mais InformaçãoOs ficheiros seguintes estão disponíveis para transferência a partir do Centro de transferências 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 transferir ficheiros de suporte da Microsoft, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base: 119591
(http://support.microsoft.com/kb/119591/EN-US/
)
Como obter ficheiros de suporte da Microsoft a partir de serviços on-line Microsoft procedeu de vírus neste ficheiro. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o ficheiro foi publicado. O ficheiro é alojado em servidores com segurança avançada que o ajudam a impedir alterações não autorizadas ao ficheiro. ListHorz.exe contém uma aplicação de exemplo completa que demonstram uma caixa de listagem com uma barra de deslocamento horizontal. As funções de suporte necessários estão contidas num módulo C que pode ser compilado e ligado a qualquer aplicação baseada no Windows. ListHscr.exe contém as fontes completas para uma DLL que contém as funções de suporte de caixa de lista necessário. Estas funções são exactamente iguais aos ListHorz.exe. Uma aplicação que utiliza os serviços da DLL para efectuar as mesmas funções que a aplicação em ListHorz.exe está incluída neste arquivo. Segue-se um destaque de informações apresentadas neste artigo: R. o Windows suporta para uma barra de deslocamento horizontal na caixa de listagem
Código de exemplo g.
Suporte do Windows para a barra de deslocamento horizontal na caixa de listagemMicrosoft Windows versão 3.0 é a primeira versão que reconheça o estilo de janela WS_HSCROLL para caixas de listagem. Este estilo adiciona uma barra de deslocamento horizontal à caixa de lista. No entanto, a barra de deslocamento não aparece automaticamente quando uma cadeia que é demasiado tempo a apresentar numa caixa de listagem é adicionada a essa caixa de listagem. Do mesmo modo, quando é removida da última cadeia maior do que a caixa de listagem, Windows não irá ocultar a barra de deslocamento. Este comportamento é diferente da barra de deslocamento vertical de uma caixa de listagem, que é adicionada e removida conforme necessário.Uma aplicação tem de manter a largura em pixels, de cada cadeia na caixa de listagem. A mensagem de caixa de lista LB_SETHORIZONTALEXTENT controla o intervalo de deslocamento e a visibilidade de uma barra de deslocamento horizontal. Neste artigo, o termo "extensão" é definido para ter a largura de um objecto em pixels. Cada cadeia tem uma extensão, tal como a própria caixa de lista. As outras secções deste artigo fornecem que informações mais detalhadas sobre considerações especiais que devem ocorrer quando lidar com barras de deslocamento horizontal em caixas de listagem. Novas mensagens de caixa de lista: LB_SETHORIZONTALEXTENT e LB_GETHORIZONTALEXTENTDuas mensagens foram adicionadas ao Windows 3.0 para suportar as barras de deslocamento 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 afecta a visibilidade de uma barra de deslocamento horizontal. Se uma barra de deslocamento estiver visível, enviar esta mensagem com uma extensão pequena especificada não removerá-lo. Do mesmo modo, se uma barra de deslocamento não estiver presente, enviar esta mensagem com uma extensão de grandes dimensões não criará um. As duas secções deste artigo explicam como adicionar e remover uma barra de deslocamento horizontal medida que as cadeias são adicionadas ou eliminadas. O ponto principal é o Windows irá apenas mostrar ou ocultar a barra quando uma cadeia é adicionada, inserida ou eliminada de deslocamento. Tornar a barra de deslocamento visíveis quando adicionar ou inserir uma cadeiaQuando uma cadeia com uma extensão superior à largura da caixa de listagem deve ser adicionado, uma aplicação tem envia o LB_SETHORIZONTALEXTENT mensagem antes de enviar um LB_ADDSTRING ou LB_INSERTSTRING mensagem.Durante o processo de adicionar ou inserir uma cadeia, o Windows compara a extensão de barra de deslocamento horizontal armazenada na caixa de listagem para a largura da área de cliente da caixa de lista. Se a extensão de área de cliente for menor que a extensão de barra de deslocamento, a barra de deslocamento fica visível na próxima hora na lista caixa é desenhada. A largura da área de cliente da caixa de listagem não inclui a largura da barra de deslocamento vertical, se estiver visível. Considere uma caixa de listagem sem uma barra de deslocamento vertical, que é preenchida com cadeias. Cada estas cadeias de caracteres é ligeiramente mais estreita do que a caixa de listagem. Quando outra cadeia é adicionada e a barra de deslocamento vertical é causada apareça, o Windows detectar que a extensão de barra de deslocamento horizontal é agora maior do que a largura da caixa de listagem e adiciona uma barra de deslocamento horizontal. Se a extensão de barra de deslocamento for menor do que a largura da área de cliente da caixa de listagem, o estado da barra de deslocamento permanece inalterado. Se a caixa de listagem não é desenhada depois da cadeia é adicionada, a barra de deslocamento não aparecerá. Por conseguinte, se a mensagem WM_SETREDRAW é utilizada para desactivar a actualização, adicionar uma cadeia não mostrará a barra de deslocamento horizontal até que a caixa de listagem é redesenhada. Ocultar a barra de deslocamento quando eliminar uma cadeiaWindows apenas remove a barra de deslocamento horizontal durante o processamento de uma mensagem LB_DELETESTRING. Por este motivo, se a cadeia a ser eliminado for mais longa na caixa de listagem, a extensão de barra de deslocamento horizontal deve ser alterada para o próximo valor extensão mais pequeno antes dessa cadeia é eliminada. Depois da cadeia é eliminada, o Windows compara a extensão de barra de deslocamento armazenado para a largura da área de cliente da caixa de listagem e, se a extensão for mais pequena, a barra de deslocamento é removida.Se a caixa de listagem não é desenhada depois da cadeia é eliminada, a barra de deslocamento não desaparecerá. Por este motivo, se a mensagem WM_SETREDRAW é utilizada para desactivar a actualização, eliminação de uma cadeia não removerá a barra de deslocamento horizontal até que a caixa de listagem é redesenhada. No entanto, se a caixa de listagem é deslocada para a direita tão pouco quanto um pixel, a barra de deslocamento permanecerá visível, independentemente da extensão que está definida. Isto é efectuado para que o utilizador pode sempre deslocar-se para a esquerda extrema. Se a barra de deslocamento foi removida, a caixa de listagem poderá ficar num estado em que é deslocado para a direita por algum valor sem qualquer forma para se deslocar back completamente para a esquerda. Para contornar este problema, desloque sempre a caixa de lista à esquerda extrema antes de eliminar a cadeia mais longa. Se uma cadeia mais curta for eliminada, a extensão permanecerá a mesma e a barra de deslocamento horizontais não será afectada na mesma. Deslocar-se apenas para a caixa de listagem se a cadeia mais longa for a ser eliminada. A caixa de listagem pode ser o scrolled completamente para a esquerda (no caso em que uma cadeia longa ainda existe na caixa de listagem) ou apenas suficiente para que a seguinte cadeia mais longa estiver visível, partindo do princípio que a caixa de listagem requer uma barra de deslocamento. O código de exemplo a Software Library (descrito acima) sempre desloca-se a caixa de listagem completamente esquerda, utilizando mensagem WM_HSCROLL, da seguinte forma:
Calcular extensões horizontal de cadeiasA discussão anterior sobre menciona extensões de cadeias, mas não fornece nenhum método para determinar estes valores.Extensões de pixel das cadeias são calculadas pela função GetTextExtent. Esta é uma chamada GDI soma da largura de pixel de cada carácter numa cadeia utilizando o letra actualmente seleccionado para um contexto de apresentação representado por um hDC. Se lpString contém uma cadeia representativa e hWndListBox é o identificador de janela à caixa de listagem, são necessários os seguintes passos para determinar o tamanho de cada cadeia:
O campo tmAveCharWidth na estrutura de TEXTMETRIC fornece um número de pixels para adicionar o comprimento da cadeia, independentemente de qual o tipo de letra está actualmente em utilização consistente. Este espaço de memória intermédia impede que as cadeias sejam cortadas. Como uma nota lateral, o valor de tmAveCharWidth é o número de pixels através do qual a caixa de listagem é deslocada na horizontal quando se clica nas setas da barra de deslocamento. Se for utilizado um tipo de letra distância fixa, a caixa de listagem é deslocada na horizontal por um carácter por cada clique. Manutenção de todas as extensões na caixa de listagemMuitos métodos possíveis podem ser utilizados para manter uma lista das extensões de cadeias na caixa de listagem. Um dos métodos mais convenientes consiste em utilizar listas de propriedades, como mostrado no exemplo de código.Cada janela tem uma lista propriedades associada. Cada propriedade é uma cadeia e um identificador de dados associada. Uma janela armazena e copia cada alça de dados utilizando a cadeia que identifica a alça. Uma lista ordenada de extensões para cadeias na caixa de listagem pode ser guardada num objecto de memória global ou local. Isto permite que todas as janelas manter a sua própria lista e não requer que a aplicação mantém um mapeamento a partir da caixa de listagem para a alça de dados propriamente dito. A lista de extensões deve ser ordenada por ordem descendente, para que seja a primeira extensão na lista que a cadeia maior na caixa de listagem. Manter esta lista ordenada também permite à aplicação utilizar uma binária procura para localizar uma extensão na lista quando um estiver a ser inserido ou eliminado. Quando é adicionada uma nova seqüência de caracteres, inserir de extensão essa cadeia da lista, manter a ordem ordenada. Se a nova extensão é colocada na parte superior da lista, envie uma mensagem LB_SETHORIZONTALEXTENT à caixa de lista de especificar a nova extensão. Não envie a mensagem para uma extensão que não seja o maior. Quando uma cadeia é eliminada, remova de extensão essa cadeia a partir da lista. Se a extensão é a primeira na lista, essa cadeia será mais longa na caixa de listagem. Neste caso, envie uma LB_SETHORIZONTALEXTENT para a caixa de lista especificando a extensão de maior seguinte na lista. Se uma cadeia mais pequena for eliminada, não envie a mensagem. Quando uma mensagem LB_RESETCONTENT é utilizada, limpar a lista completa de extensões. Enviar uma mensagem LB_SETHORIZONTALEXTENT especificando uma extensão de 0 (zero), seguido de um LB_DELETESTRING, conforme descrito na última parte da secção acima intitulado "Ocultar a barra de deslocamento quando eliminar uma cadeia." Código de exemploTal como foi mencionado acima, existem dois arquivos na biblioteca de software da Microsoft: LISTHORZ e LISTHSCR. Cada um destes exemplos fornece cinco funções de suporte que facilitam muito a manutenção das barras de deslocamento horizontal em caixas de listagem.Em LISTHORZ, estas funções são encontradas em ficheiro LISTHELP.C. Este ficheiro pode ser compilado separadamente e ligado numa aplicação. LISTHSCR contém os ficheiros de origem para uma DLL que fornece estas cinco funções de suporte. O ficheiro de C para a DLL é exactamente a mesma que LISTHORZ, excepto que o respectivo nome foi alterado. Este arquivo também inclui um programa LISTHORZ que utiliza os serviços da DLL para efectuar as mesmas funções que o programa no outro arquivo. O ficheiro LISTHAPI.H é o ficheiro de inclusão com protótipos das funções exportadas pela DLL. Uma biblioteca de importação, LISTHSCR.LIB, que é gerado pelo makefile está também incluída. A DLL é útil porque pode suporta as barras de deslocamento horizontal em qualquer número de caixas de listagem em qualquer número de aplicações. Este artigo documenta as funções de suporte: Parâmetros: hList HWND identificador à caixa de listagem que irá utilizar uma barra de deslocamento horizontal. Valor de retorno: BOOL TRUE se existirem erros, FALSE se não foi possível atribuir memória. FFreeListboxExtents(HWND hList) BOOL Liberta memória atribuída para a lista de extensão de caixa de listagem identificada pelo 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á a ser destruída. Parâmetros: hList HWND identificador à caixa de lista que foi anteriormente utilizada com valor de retorno FInitListboxExtents: BOOL TRUE se existirem erros, FALSE se memória poderá não é libertada, caso em que a propriedade não é removida. Parâmetros: hList HWND identificador à caixa de lista que será reposta. Valor devolvido: nenhum Esta função tem de ser chamada antes da cadeia é adicionada à caixa de listagem com LB_ADDSTRING ou LB_INSERTSTRING. Parâmetros: hList HWND identificador para a caixa de listagem para o qual a cadeia deve ser adicionado. psz LPSTR ponteiro para a cadeia que deve ser adicionado. Esta função tem de ser chamada antes da cadeia é adicionada para que a barra de deslocamento horizontal será mantida correctamente. Valor de retorno: WORD um destes três valores: 0 se a cadeia adicionada não era a cadeia maior na caixa de listagem e a visibilidade da barra de deslocamento horizontais não foi alterado. A extensão da cadeia adicionada, se a cadeia adicionada era mais longa e pode ter alterado a visibilidade da barra de deslocamento. -1 para um erro. Esta função tem de ser chamada antes de uma mensagem LB_DELETESTRING é enviada para a caixa de listagem. Parâmetros: hList HWND identificador à caixa de listagem a partir do qual uma cadeia deve ser removido. iSel WORD o índice da cadeia a ser removido. Valor de retorno: WORD um destes três valores: 0, se remover a cadeia não era mais longa na caixa de listagem e a visibilidade da barra de deslocamento horizontais não alterou a extensão da cadeia eliminada, se a cadeia eliminada era mais longa e pode ter alterado a visibilidade da barra de deslocamento. -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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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 de Artigos |






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


Voltar ao topo