CORRECÇÃO: Ao usar SendMessage com TB_GETIMAGELIST para obter um identificador de ImageList no Windows XP, você não obter o identificador correto

Traduções deste artigo Traduções deste artigo
ID do artigo: 811415 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Você pode usar SendMessage para obter o identificador de imagem de vários controles em controles comuns do Microsoft Windows (Mscomctl.ocx) 6.0. Ao usar SendMessage , você pode passar TB_GETIMAGELIST, LVM_GETIMAGELIST, TVM_GETIMAGELIST ou TCM_GETIMAGELIST para obter o identificador de imagelist de ToolBar, ListView, TreeView e controles TabStrip.

No entanto, quando você fazer isso em um computador executando o Windows XP, o identificador incorreto é retornado. Se você chamar qualquer outras APIs e, em seguida, passar este identificador, essas chamadas API não funcionará corretamente.

Causa

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

Resolução

Um hotfix suportado agora está disponível da Microsoft, mas destina-se somente a corrigir o problema descrito neste artigo. Aplique-o somente nos sistemas que apresentarem esse problema específico. Esta correcção poderá submetida a testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde o próximo service pack do Visual Studio 6.0 que contém esse hotfix.

Para resolver esse problema imediatamente, contate o Atendimento Microsoft para obter a correção. Para obter uma lista completa dos números de telefone do Atendimento Microsoft do e informações sobre os custos de suporte, visite o seguinte site:
http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS
Observação Em alguns casos, as taxas cobradas pelas ligações para chamadas de suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados a questões e problemas que não se qualificam à atualização específica em questão de suporte adicionais.

A versão em inglês dessa correção apresenta os atributos de arquivo (ou posteriores) listados na tabela a seguir. As datas e horas desses arquivos são listadas na acordo hora universal coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário na ferramenta Data e hora no painel de controle.
   Date         Time   Version   Size       File name
   -----------------------------------------------------
   13-Dec-2002  00:18  6.0.97.1  1,062,160  Mscomctl.ocx

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo.

Mais Informações

Passos para reproduzir o problema

Para reproduzir o problema usando o controle de barra de ferramentas, execute essas etapas:
  1. Inicie um novo projeto Visual Basic 6.0 Standard EXE. Por padrão, é criado o Form1.
  2. No menu de projetos , clique em componentes . Na caixa de diálogo Components , adicione uma referência para o Microsoft Windows 6.0 de controles comuns .
  3. Adicione um controle ImageList (ImageList1), um controle de barra de ferramentas (Toolbar1) e um CommandButton (Command1) ao Form1.
  4. Clique com o botão direito do controle ImageList e clique em guia imagens adicionar controlam duas imagens a ImageList.
  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. Executar o aplicativo e, em seguida, clique em Command1 . A caixa de texto de Contagem de imagem contém 0 . Depois de aplicar o hotfix, a contagem de imagem corretamente retorna como 2 .

Propriedades

ID do artigo: 811415 - Última revisão: quarta-feira, 26 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 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: 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