Oprava: Při použití SendMessage s TB_GETIMAGELIST získat popisovače ImageList v systému Windows XP, je není získat správné zpracování

Překlady článku Překlady článku
ID článku: 811415 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Můžete použít SendMessage získání popisovače obraz z různých ovládacích prvků v systému Microsoft Windows běžné ovládací prvky 6.0 (Mscomctl.ocx). Pomocí SendMessage, můžete předat TB_GETIMAGELIST, LVM_GETIMAGELIST, TVM_GETIMAGELIST nebo TCM_GETIMAGELIST získání popisovače imagelist pro panel nástrojů, ListView, TreeView a ovládací prvky TabStrip.

Po provedení této akce v počítači se systémem Windows XP, je však vrácena chybný popisovač. Pokud jiné rozhraní API volat a potom předejte tento popisovač, volání těchto rozhraní API nebude pracovat správně.

Příčina

K tomuto problému dochází, protože systém Windows XP a Mscomctl.ocx načíst dvě různé verze Comctl32.dll, které nejsou kompatibilní.

Řešení

Má nyní od společnosti Microsoft k dispozici podporovanou opravu hotfix, která je určena pouze k opravě problému popsaného v tomto článku. Pouze použijte u systémů, ve kterých dochází k popsanému problému. Tato oprava hotfix může být dále testována. Proto pokud je přísně neohrožuje tento problém, doporučujeme počkat na další aktualizaci service pack pro aplikaci Visual Studio 6.0, která bude tuto opravu hotfix obsahovat.

Potřebujete-li odstranit tento problém okamžitě, obraťte se na technickou podporu společnosti Microsoft, kde můžete tuto opravu získat. Úplný seznam telefonních čísel služeb technické podpory společnosti Microsoft a informace o cenách podpory naleznete na následujícím webu společnosti Microsoft:
http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS
Poznámka: Ve zvláštních případech mohou být poplatky za poskytnutí telefonické podpory účtovány stornovány, jestliže pracovník technické podpory společnosti Microsoft určí, že konkrétní aktualizace vyřeší váš problém. Výdaje na podporu se obvykle týkají dalších otázek a problémů, které se netýkají této zvláštní opravy.

Anglická verze této opravy atributy souborů (nebo novější), jsou uvedeny v následující tabulce. Data a časy těchto souborů jsou uvedeny v čase univerzální koordinovaný (čas UTC). Při zobrazení informací o souboru, bude převedena na na místní čas. Rozdíl mezi místním časem a UTC časem kartě časové pásmo v panelu Datum a čas v Ovládacích panelech.
   Date         Time   Version   Size       File name
   -----------------------------------------------------
   13-Dec-2002  00:18  6.0.97.1  1,062,160  Mscomctl.ocx

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny na začátku tohoto článku.

Další informace

Kroky pro reprodukci tohoto chování

Chcete-li problém reprodukovat pomocí ovládacího panelu nástrojů, postupujte takto:
  1. Spuštění nového projektu jazyka Visual Basic 6.0 standardní EXE. Ve výchozím nastavení je vytvořen Form1.
  2. V nabídce projekty klepněte na součásti. V dialogovém okně součásti přidat odkaz na Microsoft Windows běžné ovládací prvky 6.0.
  3. Přidat ovládací prvek ImageList (ImageList1), ovládací prvek Toolbar (Toolbar1) a CommandButton (Command1) Form1.
  4. Klepněte pravým tlačítkem myši na ovládací prvek ImageList a klepněte na kartu obrázky přidat dva obrazy do seznamu ImageList řízení.
  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. Spusťte aplikaci a klepněte na tlačítko Command1. Textové pole Počet obraz obsahuje 0. Po instalaci opravy hotfix vrátí počet obrazu správně jako 2.

Vlastnosti

ID článku: 811415 - Poslední aktualizace: 28. února 2014 - Revize: 2.3
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • the operating system: Microsoft Windows XP
Klíčová slova: 
kbnosurvey kbarchive kbmt kbvbp600fix kbfix kbqfe KB811415 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:811415

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