Привет Артем. В общих чертах я кажется добил рисование гридов. Общая теория такова, все надо делать ручками, хотя и немного. Высылаю примерчик. Реализовано рисование каждого элемента. По умолчанию делается тоже самое, но немного действий ложноножками и получается симпатично void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct).
Реализована сортировка. Реализация кривовата. Согласен за критику в это место, как будет готов нормальный и оттестированных заголовок, пришлю примерчик. Но главное это принцип. Много слышал о неработающей сортировке. Как уже и писал, проблема в том, что не программист не присваивает уникальный номер записи /*BookMark если хотите*/, и обычная сортировка "неработает".
При добавлении записи необходимо у элемента LV_ITEM a1; /*Например*/ кроме a1.lParam=(LPARAM) 1; еще сделать так a1.mask= ...|LVIF_PARAM; более подробно расскажут в MSDN, или SetItemData(). А пример функции сортировки static int CALLBACK AlphabeticalOrder(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); поскольку статик, то в общем перечне не видна /*наверно так*/, но ее можно спокойно найти по поиску или в Tmp3dlg.cpp. Сортировка типа динамическая, сначала по первому столбцу, потом по 2 потом снова по 3 и т.д. void CTmp3Dlg::OnButton1();.
И последнее редактирование. Есть возможность редактирования любого элемента любой строки, любого столбца.
void CMyListCtrl::OnBeginlabeledit(NMHDR* pNMHDR, LRESULT* pResult); void CMyListCtrl::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) ;
Тут добавлена проверка. Если длинна введенного значения <4 то редактирование будет отменено тоже для примера.
class CMyEdit : public CEdit void CMyEdit::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
В этой функция важна, с небольшим изменением /*см.в коде*/ ибо если редактировать элемент, в гриде и при этом первый столбец невидим, скрыт за прокруткой, то будет работать криво.
А также можно вместо поля, показывать списки гриды и прочие. /*Матрицей попахивает:))))*/ Но это работает как в проводнике. Для редактирования необходимо дважды щелкнуть через небольшой промежуток времени. У меня пользователи работают с клавиатурой так, что последняя порой дымится и приходится ставить на нее кулер :))))) По сему я добавил маленький наворотик
void CMyListCtrl::OnLButtonDown(UINT nFlags, CPoint point);