Você está offline; aguardando reconexão

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

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
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
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: 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 ExplicitPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As LongPrivate Declare Function GetImageCount Lib "comctl32" Alias "ImageList_GetImageCount" (ByVal p As Long) As LongPrivate Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal cmd As Long) As LongPrivate Const WM_USER = &H400Private Const TB_GETIMAGELIST = WM_USER + 49Private Const GW_CHILD = 5Private 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 SubPrivate 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 = 2End 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 .

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 811415 - Última Revisão: 02/27/2014 05:23:56 - Revisão: 2.3

Microsoft Visual Basic 6.0 Enterprise Edition, Microsoft Visual Basic 6.0 Learning Edition, the operating system: Microsoft Windows XP

  • kbnosurvey kbarchive kbmt kbvbp600fix kbfix kbqfe KB811415 KbMtpt
Comentários