2016-05-06 3 views
0

У меня проблема, которая граничит с нелепой. Это звучит просто, но я провел пару дней, исследуя это безрезультатно.устаревший список не касается-прокрутки

У меня есть программа в ATL/WTL, которая использует элементы управления listview для отображения файлов и папок. Пользователи жалуются, что эти панели не будут прокручиваться, используя жест «панорамирования» на ПК с сенсорным экраном. Он прокручивает изображение с помощью мыши, но не пальцем.

Программа полностью косвенна. Он полагается на legacy behavior, чтобы перевести touch для прокрутки сообщений, но он не работает. Мне сложно устранить неполадки, потому что У меня нет есть сенсорный экран Windows для тестирования. Я считаю, что сообщения прокрутки отправляются, но затем окно возвращается. Я вообще не делаю никаких событий прокрутки, поэтому это поведение по умолчанию по умолчанию.

Другие элементы управления списком, которые я использую в той же программе, например. в диалоговых окнах, работайте правильно (!) с сенсорной прокруткой. После устранения всех других возможностей я пришел к выводу, что проблема возникает из имени класса окна (?). В то время как ListView окно в диалогах имеет имя syslistview32 класса по умолчанию, взгляды, которые не будут спиральными superclassed в АТЛ образом:

DECLARE_WND_SUPERCLASS(_T("ATL:ShellItemView"), CListViewCtrl::GetWndClassName()) 

однако базовый классом является стандартом управления ListView. Может ли проблема быть именем класса ?! Я ничего не могу придумать. Если у вас есть сенсорный компьютер, вы можете попробовать программу здесь (free trial)

благодаря Никоса

+0

Сверхклассификация изменяет поведение. Разве вы не считали, что вы активно нарушаете функциональность, которой вы подвергаетесь? – IInspectable

+0

Суперкласс имеет тот же DefWndProc, что и элемент управления списком. Я только изменяю поведение, которое мне нужно, и это не имеет никакого отношения к прокрутке. Если моя догадка правильна, независимо от того, что имеет дело с трансляцией сообщений с сенсорным прокруткой, он смотрит на имя класса окна, чтобы распознавать стандартные элементы управления. – nikos

+0

Итак, теперь вы знаете, как построить [mcve]. – IInspectable

ответ

0

да так, чтобы имя класса был его! Вместо суперклассирования listview я создал стандартное listview, а затем подклассифицировал его. Это сохраняет имя класса syslistview32, но предоставляет дополнительные возможности. Что в имени?

Это большая ошибка в микрософт; Не могу поверить, что я потерял 3 дня. Но, по крайней мере, сейчас это решено.

 Смежные вопросы

  • Нет связанных вопросов^_^