Windows 8 и CListCtrl

В настоящее время я пытаюсь перенести продукт на Windows 8 (режим рабочего стола). Согласно Microsoft, продукт должен просто работать, но я столкнулся с проблемой при использовании вызова CListCtrl. Элемент управления списком создает элементы списка, но в элементе управления списком не отображается текст, а отображается только пустой значок документа.

Элемент управления является элементом управления, нарисованным владельцем, и передаваемые данные определенно действительны, но при вставке этих данных в новую запись в элементе управления он в конечном итоге отображается как пустой. Это происходит только в Windows 8..

Кто-нибудь сталкивался с этой проблемой, или есть идеи, в чем может быть проблема?


person nieq    schedule 30.08.2012    source источник
comment
Проблем со шрифтами нет?   -  person Some programmer dude    schedule 30.08.2012
comment
Шрифты в порядке, я попытался жестко кодировать стандартные шрифты, размеры и цвета, и все равно поведение такое же :(   -  person nieq    schedule 30.08.2012
comment
После некоторого дополнительного расследования я обнаружил, что данные теряются из-за следующего пути в коде:   -  person nieq    schedule 11.09.2012
comment
После некоторого дополнительного исследования я обнаружил, что данные теряются из-за следующего пути в коде: 1. Вызов ListBox_AddItemData() с правильным дескриптором окна и передачей в качестве lParam указателя на мою структуру сообщения, 2. Окно LB_ADDSTRING сообщение перехвачено, но lParam теперь указывает на другую часть памяти. Это происходит только в Windows 8, в Windows 7 такой проблемы нет.   -  person nieq    schedule 11.09.2012
comment
Наш класс управления списком на самом деле является тем, который наследуется от класса CListCtrl из-за того, что владелец отрисовывает вещи, которые нам нужны.   -  person nieq    schedule 11.09.2012
comment
Когда вы передаете указатель на структуру вашего сообщения, эта структура размещается в стеке или в куче?   -  person Some programmer dude    schedule 11.09.2012


Ответы (1)


Оказывается, мы вызывали ListBox_AddItemData() для отправки сообщения Windows, что работало в предыдущих версиях Windows, но Windows 8 не позволяет этого.

На самом деле это сообщение перехватывает элемент управления ListView. Как только я переключил функцию, вызывающую ListBox_AddItemData(), на отправку пользовательского сообщения, которое было перехвачено элементом управления ListView, указатели теперь правильные, поэтому что-то изменилось в взломщике сообщений для Listbox_AddItemData.

person nieq    schedule 14.09.2012