CListBox - редактирование в каждой колонке

Привет Артем. В общих чертах я кажется добил рисование гридов. Общая теория такова, все надо делать ручками, хотя и немного. Высылаю примерчик. Реализовано рисование каждого элемента. По умолчанию делается тоже самое, но немного действий ложноножками и получается симпатично 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);

gif/31_1.gif (6029 b)


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Moth - 04.08.2000