Операционная система Windows 95 для программиста



    d8ef8794     

Коды извещений - часть 3


Можно было бы подумать, что орган управления List View выполняет сортировку сам, без дополнительных усилий со стороны программиста, однако это не так. Очевидно, функции окна List View не известно, какой именно алгоритм сортировки должен быть использован в вашем приложении.

Тем не менее вы без особого труда сможете организовать простейшую сортировку текстовых и числовых полей. Для этого вам нужно создать обработчик извещения LVN_COLUMNCLICK и написать свою функцию сравнения двух элементов.

Обработчик извещения LVN_COLUMNCLICK может выглядеть, например, так:

NM_LISTVIEW *lpNm = (NM_LISTVIEW *)pnmhdr; ... case LVN_COLUMNCLICK: { ListView_SortItems(lpNm->hdr.hwndFrom, LVCompareProc, (LPARAM)(lpNm->iSubItem)); return 0L; break; }

Обработка извещения LVN_COLUMNCLICK сводится к вызову единственной макрокоманды ListView_SortItems, посылающей окну органа управления List View сообщение LVM_SORTITEMS :

BOOL ListView_SortItems( HWND hwnd, // идентификатор окна органа List View PFNLVCOMPARE pfnCompare, // указатель на функцию сравнения LPARAM lParamSort); // произвольное значение, которое // передается функции сравнения

В качестве последнего параметра мы передаем макрокоманде номер дополнительного элемента, по которому выполняется сортировка.

При вызове обработчика извещения LVN_COLUMNCLICK в параметре lParam сообщения WM_NOTIFY передается адрес структуры NM_LISTVIEW , определенной следующим образом:

typedef struct tagNM_LISTVIEW { NMHDR hdr; // для любого сообщения WM_NOTIFY int iItem; // номер элемента списка int iSubItem; // номер дополнительного элемента списка UINT uNewState; // новое состояние элемента UINT uOldState; // старое состояние элемента UINT uChanged; // изменившиеся атрибуты элемента POINT ptAction; // позиция, в котором произошло событие LPARAM lParam; // дополнительное значение } NM_LISTVIEW;

Наш обработчик извещения LVN_COLUMNCLICK получает номер дополнительного элемента, по которому выполняется сортировка, из поля iSubItem структуры NM_LISTVIEW.




Содержание  Назад  Вперед