Наибольший интерес к:
void CMyListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
эта Функция, по логике, должна была бы уже быть в комлекте:
void CMyListCtrl::SetStile(DWORD NewStile)
Логика проста. В диалог добаляем CListCtrl. Это можно сделать и через Wizard. После поключаем *.h и меняем в переменной класса CListCtrl на CMyListCtrl и все работает.
BOOL CTmp3Dlg::OnInitDialog()
Там все с коментариями. Часто задают вопрос про "неработающую" сортировку в CListCtrl. Тут есть два пути.
1. http://codeguru.earthweb.com/listview/index.shtml. Пример, как сортировку можно написать самому. Ручками.
2. Если разобраться, почему в функции типа
static int CALLBACK AlphabeticalOrder(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { // lParamSort contains a pointer to the list view control. // The lParam of an item is just its index. CListCtrl* pListCtrl = (CListCtrl*) lParamSort; CString strItem1 = pListCtrl->GetItemText(lParam1, 0); CString strItem2 = pListCtrl->GetItemText(lParam2, 0); return strcmp(strItem1, strItem2); }
Значения lParam1 и lParam2 все время принимаю значения 0, то решение лежит на поверхности. Эти переменные содержат не номер как это часто пытаются использовать а.
typedef struct _LVITEM UINT mask; int iItem; int iSubItem; UINT state; UINT stateMask; LPTSTR pszText; int cchTextMax; int iImage; LPARAM lParam; //<<<<<--- а вот этот параметр. #if (_WIN32_IE >= 0x0300) int iIndent; #endif } LVITEM
Т.е. при дополнении записи, необходимо заполнять этот параметр. А этого не делают. А потом вопросы типа, оно не работает. Мелкомягкие плохие, они меня обидели и т.д. Это можно делать по разному.
Первый вариант
int InsertItem( const LV_ITEM* pItem ); int InsertItem( UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam );
Второй вариант
BOOL SetItem( const LV_ITEM* pItem ); BOOL SetItem( int nItem, int nSubItem, UINT nMask, LPCTSTR lpszItem, int nImage, UINT nState, UINT nStateMask, LPARAM lParam );
Третий вариант
BOOL SetItemData( int nItem, DWORD dwData );
Где DWORD dwData это самое уникальное значение, типа BookMark.