CORRECÇÃO: Quando utiliza EnviarMensagem com TB_GETIMAGELIST para obter um identificador de ImageList no Windows XP, não obter processar correcto

Traduções de Artigos Traduções de Artigos
Artigo: 811415 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Pode utilizar EnviarMensagem para obter o identificador de imagem a partir de vários controlos em controlos comuns do Microsoft Windows 6.0 (mscomctl.ocx). Utilizando EnviarMensagem , pode passar TB_GETIMAGELIST, LVM_GETIMAGELIST, TVM_GETIMAGELIST ou TCM_GETIMAGELIST obter o identificador imagelist para a barra de ferramentas, ListView, TreeView e TabStrip controlos.

No entanto, quando efectua este procedimento num computador com o Windows XP, o identificador incorrecto é devolvido. Se chamar outras API e, em seguida, passar este identificador, as chamadas à API não funcionará correctamente.

Causa

Este problema ocorre porque o Windows XP e mscomctl.ocx carregam duas versões diferentes do ficheiro Comctl32.dll que não são compatíveis.

Resolução

Agora é disponibilizada pela Microsoft uma correcção suportada, mas destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em sistemas que tenham este problema específico. Esta correcção poderá submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde pelo próximo service pack do Visual Studio 6.0 que contenha esta correcção.

Para resolver este problema imediatamente, contacte o suporte técnico da Microsoft para obter a correcção. Para obter uma lista completa de números de telefone do suporte técnico da Microsoft e informações sobre os custos de suporte, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS
Nota Em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados, se um técnico de suporte da Microsoft determinar que uma actualização específica resolverá o problema. Os custos normais do suporte serão aplicados a problemas adicionais e questões de suporte que não se enquadrem na atualização específica em questão.

A versão inglesa desta correcção tem os atributos de ficheiro (ou posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas no formato de universal hora (UTC) coordenada Coordinated. Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário na ferramenta Data e hora no painel de controlo.
   Date         Time   Version   Size       File name
   -----------------------------------------------------
   13-Dec-2002  00:18  6.0.97.1  1,062,160  Mscomctl.ocx

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo.

Mais Informação

Passos para reproduzir o comportamento

Para reproduzir o problema utilizando o controlo de barra de ferramentas, siga estes passos:
  1. Inicie um novo projecto EXE padrão do Visual Basic 6.0. Por predefinição, é criado o Form1.
  2. No menu de projectos , clique em componentes . Na caixa de diálogo Components , adicione uma referência para 6.0 de controlos comuns do Microsoft Windows .
  3. Adicione um controlo ImageList (ImageList1), um controlo de barra de ferramentas (Toolbar1) e um CommandButton (Command1) ao Form1.
  4. Clique com o botão direito do rato o controlo ImageList e, em seguida, clique no separador de imagens . adicionar duas imagens para a ImageList controlam.
  5. Add the following code to Form1:
    Option Explicit
    
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
    Private Declare Function GetImageCount Lib "comctl32" Alias "ImageList_GetImageCount" (ByVal p As Long) As Long
    Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal cmd As Long) As Long
    
    
    Private Const WM_USER = &H400
    Private Const TB_GETIMAGELIST = WM_USER + 49
    Private Const GW_CHILD = 5
    
    Private Sub Command1_Click()
        Dim hImageList As Long, hChild As Long
        
        hChild = GetWindow(Toolbar1.hwnd, GW_CHILD)
        
        hImageList = SendMessage(hChild, TB_GETIMAGELIST, 0, 0)
        MsgBox "Image Count = " & GetImageCount(hImageList)
    End Sub
    
    Private Sub Form_Load()
        Set Toolbar1.ImageList = ImageList1
        Toolbar1.Buttons.Add , , "Button 1"
        Toolbar1.Buttons.Add , , "Button 2"
        Toolbar1.Buttons(1).Image = 1
        Toolbar1.Buttons(2).Image = 2
    End Sub
    
  6. Execute a aplicação e, em seguida, clique em Command1 . A caixa de texto de Contagem de imagem contém 0 . Depois de aplicar a correcção, a contagem de imagem devolve correctamente como 2 .

Propriedades

Artigo: 811415 - Última revisão: 27 de fevereiro de 2014 - Revisão: 2.3
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • the operating system: Microsoft Windows XP
Palavras-chave: 
kbnosurvey kbarchive kbmt kbvbp600fix kbfix kbqfe KB811415 KbMtpt
Tradução automática
IMPORTANTE: 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: 811415

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com