Сразу оговорюсь: если до меня в инете кто-то уже выкладывал информацию по этой теме – просьба запостить линк, ведущий туда, где это было сделано. Баг был обнаружен при отладке одной из моих программ, в окне которой используется коммон контрол list view. Бажит сообщение, вызываемое для произвольной сортировки контента контрола - LVM_SORTITEMSEX. Краткий ЛикБез по LVM_SORTITEMSEX: при вызове сообщению передаётся произвольное двойное слово, содержащее в себе любую информацию о том, каким образом будет сортироваться содержимое контрола. Так же передаётся адрес функции обратного вызова, код которой обеспечивает реализацию ядра алгоритма сортировочного цикла. Краткий ЛикБез по функции обратного вызова: ей передаётся двойное слово, которое было передано при посылке LVM_SORTITEMSEX, и два индекса, обозначающие элементы, которые требуется сравнить в данный момент. Баг заключается в том, что при том порядке элементов, который генерирует мой исходник, код ОС'и никогда не передаёт индексы элементов с метками «5555” и «2222” функции обратного вызова для сравнения. Для удобства, я сделал код создающий и отображающий сообщение о том, элементы с какими метками сравниваются в данный момент. Сортировка элементов идёт по возростанию и начинается при щелчке по хедеру листа. Прога тестировалась на WinXPx86_SP3, WinVistax64_SP1 и на Win7x64.
Crollspase Для того чтобы отсортировать список, не обязательно сравнивать каждый элемент с каждым. Покажи тело колбека.
Crollspase: _DEN_: Что-то меня глюконуло, когда пост писал… Поправка: “5555” вообще ни с чем кроме «1111” не сравнивается. _DEN_: SortingListViewCycleCore. Я'ж там чуть ли не каждую функцию прокомментировал… В конце концов, можно забить в поиск "LVM_SORTITEMSEX", и сразу прояснится, какая функция является callback'ом для сообщения.