Войти

Исправление: При использовании со TB_GETIMAGELIST SendMessage для получения дескриптора ImageList в Windows XP, вы не получите подходящий дескриптор

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

811415
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Проблема
можно написатьSendMessageдля получения дескриптора изображения из различных элементов управления в стандартные элементы управления Microsoft Windows версии 6.0 (Mscomctl.ocx). С помощьюSendMessage, можно передать TB_GETIMAGELIST LVM_GETIMAGELIST, TVM_GETIMAGELIST или TCM_GETIMAGELIST получить дескриптор imagelist для панели инструментов, ListView, TreeView и элементы управления TabStrip.

Тем не менее при этом на компьютере под управлением Windows XP, возвращается неверный дескриптор. При вызове других интерфейсов API, а затем передать этот дескриптор, эти вызовы API, не будет работать правильно.
Причина
Данная проблема возникает, поскольку Windows XP и Mscomctl.ocx две различные версии Comctl32.dll несовместимы.
Решение
Корпорация Майкрософт выпустила специальное исправление, предназначенное для устранения этой проблемы.. Это исправление необходимо применять только в тех системах, где наблюдается данная проблема.. Исправление может подвергаться дополнительному тестированию.. Таким образом Если вы не подвержены серьезно эту проблему, рекомендуется дождаться следующего пакета обновления Visual Studio 6.0, содержащего это исправление.

Если необходимо немедленно устранить эту проблему, обратитесь в службу технической поддержки Майкрософт, чтобы получить данное исправление.. Полный список телефонов службы поддержки, а также сведения об условиях обслуживания см. на веб-узле корпорации Майкрософт по следующему адресу::Примечание.В отдельных случаях, если специалистом службы технической поддержки Майкрософт будет определено, что решением проблемы является специально выпущенное исправление, оплата, предусмотренная за обращение в службы технической поддержки, может быть отменена.. Дополнительные услуги по технической поддержке, не связанные с данным исправлением, оплачиваются на стандартных условиях..

Английская версия данного исправления содержит версии файлов, приведенные в следующей таблице, или более поздние.. Дата и время для файлов указаны во всеобщем скоординированном времени (UTC).. При просмотре сведений о файле, время изменяется на местное.. Чтобы узнать разницу между временем по Гринвичу и местным временем,Часовой поясвкладки в окне «Дата и время» панели управления.
   Date         Time   Version   Size       File name   -----------------------------------------------------   13-Dec-2002  00:18  6.0.97.1  1,062,160  Mscomctl.ocx
Статус
Данное поведение является подтвержденной ошибкой продуктов Майкрософт, перечисленных в начале данной статьи..
Дополнительная информация

Действия по воспроизведению поведения

Чтобы воспроизвести проблему с помощью панели управления, выполните следующие действия:
  1. Начните новый проект Visual Basic 6.0 стандартный EXE. По умолчанию будет создана форма Form1..
  2. в менюПроектывыберите пунктComponents:. В диалоговом окнеComponents:диалоговое окно нажмите Добавить ссылкуОпределяет, является общее Microsoft Windows версии 6.0.
  3. ДобавитьImageListЭлемент управления (ImageList1),Панель инструментовЭлемент управления (Toolbar1) иCommandButton(Command1) на форму Form1.
  4. , щелкните правой кнопкой мыши объектImageListуправлять, а затем нажмите кнопкуИзображенияДобавить вкладку два изображения в объект ImageList элемента управления.
  5. Добавьте следующий код в форму 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. Запустите приложение и нажмите кнопкуCommand1. надписьюЧисло изображенийсодержит текстовое поле0. После установки исправления счетчик изображения правильно возвращает в виде2.

Предупреждение: эта статья переведена автоматически

Свойства

Номер статьи: 811415 — последний просмотр: 02/21/2014 00:45:26 — редакция: 2.0

  • Microsoft Visual Basic 6.0 Enterprise Edition
  • kbnosurvey kbarchive kbvbp600fix kbfix kbqfe kbmt KB811415 KbMtru
Отзывы и предложения