Update: Wenn Sie SendMessage mit TB_GETIMAGELIST, verwenden erhalten Sie eine ImageList-Handles auf Windows XP, Sie nicht die richtigen Handle erhalte

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 811415 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

SendMessage können Sie das Bild Handle aus verschiedenen Steuerelementen in Microsoft Windows-Standardsteuerelemente 6.0 (Mscomctl.ocx) abzurufen. Mithilfe der SendMessage können Sie TB_GETIMAGELIST, LVM_GETIMAGELIST, TVM_GETIMAGELIST oder TCM_GETIMAGELIST, um das Bildliste Handle abzurufen, für die Symbolleiste, ListView, TreeView übergeben und steuert die Register.

Wenn Sie diese auf einem Computer unter Windows XP tun, wird das falsche Handle zurückgegeben. Wenn Sie andere APIs aufrufen und dann dieses Handle übergeben, werden diese API-Aufrufe nicht ordnungsgemäß.

Ursache

Dieses Problem rührt von Windows XP und Mscomctl.ocx zwei verschiedene Versionen von "Comctl32.dll" laden, die nicht kompatibel sind.

Lösung

Ein Hotfix zur Behebung dieses Problems ist inzwischen bei Microsoft erhältlich; dieser Hotfix wurde jedoch ausschließlich zur Behebung des in diesem Artikel beschriebenen Problems entwickelt. Deshalb sollten Sie nur Systeme aktualisieren, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird unter Umständen zu einem späteren Zeitpunkt weiteren Tests unterzogen. Wenn Sie durch dieses Problem nicht schwerwiegend betroffen sind, empfiehlt Microsoft daher, auf das nächste Visual Studio 6.0 Service Pack warten, das diesen Hotfix enthält wird.

Wenn Sie das Problem sofort beheben möchten, wenden Sie sich an Microsoft Product Support Services, um das Update zu erhalten. Eine vollständige Liste mit Telefonnummern der Microsoft-Produktsupport und Informationen Supportkosten der folgenden Microsoft-Website:
http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS
Hinweis: PLEASE DO NOT TRANSLATE and DELETE THIS PASSAGE. IT DOES NOT APPLY TO GERMANY.

Die englische Version dieses Updates weist die in der nachstehenden Tabelle aufgelisteten Dateiattribute (oder höher) auf. Die Datums- und Uhrzeitangaben für diese Dateien werden in Coordinated Universal Time () angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln verwenden Sie die Registerkarte Zeitzone des Tools ? Datum und Uhrzeit in der Systemsteuerung.
   Date         Time   Version   Size       File name
   -----------------------------------------------------
   13-Dec-2002  00:18  6.0.97.1  1,062,160  Mscomctl.ocx

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel Microsoft-Produkten handelt.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

Gehen Sie folgendermaßen vor, um das Problem mithilfe des Symbolleiste-Steuerelements zu reproduzieren,
  1. Starten Sie ein neues Standard EXE in Visual Basic 6.0-Projekt. Standardmäßig wird jetzt Form1 erstellt.
  2. Klicken Sie im Menü Projekte auf Komponenten . Fügen Sie im Dialogfeld Komponenten einen Verweis auf Microsoft Windows-Standardsteuerelemente 6.0 hinzu.
  3. Fügen Sie ein Steuerelement Abbildungsliste (ImageList1), ein Steuerelement Symbolleiste (Toolbar1) und eine Befehlsschaltfläche (Command1) zu Form1 hinzu.
  4. Klicken Sie mit der rechten Maustaste auf das ImageList -Steuerelement, und klicken Sie dann auf die Registerkarte Bilder hinzufügen, die zwei Bilder in die ImageList steuern.
  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. Führen Sie die Anwendung, und klicken Sie dann auf Command1 . Das Bild Anzahl Textfeld enthält 0 . Nachdem Sie den Hotfix angewendet haben, gibt die Anzahl Bild korrekt als 2 zurück.

Eigenschaften

Artikel-ID: 811415 - Geändert am: Montag, 24. Februar 2014 - Version: 2.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • the operating system: Microsoft Windows XP
Keywords: 
kbnosurvey kbarchive kbmt kbvbp600fix kbfix kbqfe KB811415 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 811415
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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