FIX: Quando si utilizza SendMessage con TB_GETIMAGELIST per ottenere un Handle ImageList in Windows XP, È non ottenere l'handle di correzione

Traduzione articoli Traduzione articoli
Identificativo articolo: 811415 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato archiviato. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

È possibile utilizzare SendMessage per ottenere l'handle dell'immagine da vari controlli in Microsoft Windows Common Controls (Mscomctl.ocx) 6.0. Utilizzando SendMessage , è possibile passare TB_GETIMAGELIST, LVM_GETIMAGELIST, TVM_GETIMAGELIST o TCM_GETIMAGELIST per ottenere l'handle di imagelist per la barra degli strumenti, ListView, TreeView e controlli TabStrip.

Tuttavia, quando si effettua questa operazione in un computer che esegue Windows XP, viene restituito l'handle non valido. Se si chiamata alcuna API altri e quindi passare questo handle, le chiamate di API non funzionerà correttamente.

Cause

Questo problema si verifica poiché Windows XP e Mscomctl.ocx caricati due diverse versioni di Comctl32.dll che non sono compatibili.

Risoluzione

Un hotfix supportato è disponibile da Microsoft, tuttavia è destinato esclusivamente per risolvere il problema descritto in questo articolo. Utilizzarla solo nei sistemi in cui si verifica questo problema specifico. Questo aggiornamento rapido (hotfix) potrebbe essere eseguiti ulteriori test. Pertanto, se non si è notevolmente interessati da questo problema, si consiglia di attendere la versione successiva del Visual Studio 6.0 service pack contenente questo aggiornamento rapido (hotfix).

Per risolvere immediatamente il problema, contattare il Servizio Supporto Tecnico Clienti Microsoft per ottenere la correzione. Per un elenco completo di numeri di telefono del servizio supporto tecnico clienti Microsoft e per informazioni sui costi dell'assistenza, visitare il seguente sito Web Microsoft:
http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS
Nota in casi particolari, le spese normalmente addebitate per le chiamate al Servizio Supporto Tecnico Clienti Microsoft potrebbero essere annullate qualora un addetto del Supporto Tecnico Microsoft dovesse determinare che uno specifico aggiornamento risolverà il problema. I normali costi del Servizio Supporto Tecnico Clienti verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare nello specifico aggiornamento in questione.

La versione in lingua inglese di questa correzione presenta gli attributi di file elencati nella tabella seguente (o successivi). Date e ore per questi file sono indicati nella coordinated universal time (UTC). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e l'ora locale, utilizzare la scheda fuso orario dello strumento Data e ora del Pannello di controllo.
   Date         Time   Version   Size       File name
   -----------------------------------------------------
   13-Dec-2002  00:18  6.0.97.1  1,062,160  Mscomctl.ocx

Status

Microsoft ha confermato che questo un bug nei prodotti Microsoft elencati all'inizio di questo articolo.

Informazioni

Procedura per riprodurre il problema.

Per riprodurre il problema utilizzando il controllo barra degli strumenti, attenersi alla seguente procedura:
  1. Avviare un nuovo progetto EXE standard di Visual Basic 6.0. Per impostazione predefinita, verrà creato Form1.
  2. Nel menu progetti , fare clic su componenti . Nella finestra di dialogo componenti , aggiungere un riferimento a Microsoft Windows Common Controls 6.0 .
  3. Aggiungere un controllo ImageList (ImageList1), un controllo Toolbar (Toolbar1) e un CommandButton (Command1) a Form1.
  4. Fare clic con il pulsante destro del mouse il controllo ImageList e quindi scegliere la scheda immagini Aggiungi controllano due immagini per il controllo 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. Eseguire l'applicazione e quindi fare clic su Command1 . La casella di testo del Numero di immagini contiene 0 . Dopo avere applicato l'aggiornamento rapido, il numero di immagine restituisce correttamente come 2 .

Proprietà

Identificativo articolo: 811415 - Ultima modifica: mercoledì 26 febbraio 2014 - Revisione: 2.3
Le informazioni in questo articolo si applicano a:
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • the operating system: Microsoft Windows XP
Chiavi: 
kbnosurvey kbarchive kbmt kbvbp600fix kbfix kbqfe KB811415 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 811415
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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