Доброе время суток уважаемые! Есть ListVew создан таким образом: hwndListView = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, name,// dummy text dwStyle, rct->left, rct->top, rct->right-rct->left, rct->bottom-rct->top, hWnd, (HMENU)comd, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE), NULL); ListView_SetExtendedListViewStyleEx(hwndListView,0,LVS_EX_GRIDLINES); Хочу чтобы сортировалась своей функцией по клику на заголовок листвью, но не работает. Обрабатываю клик так: case LVN_COLUMNCLICK: { NMLISTVIEW *lpdi = (NMLISTVIEW *)lParam; int res; if (lpdi->iSubItem == 2) // по второму столбцу { res = ListView_SortItems(lpdi->hdr.hwndFrom, (LPARAM)Sort_by_ip, (LPARAM)lpdi->iSubItem); // обычный враппер для SendMessage if (res > 0) { Message::Log("ListView sorting true..."); } } } return 0; Так вот res всегда возвращается в 0 т.е. FALSE, уже мозг сломал в чем может быть дело. Процедура обработки такая: int CALLBACK Sort_by_ip(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { return 1; // для теста - бряк здесь не срабатывает } Ума не приложу в чем может быть дело. Помогите советом если где ошибся. Спасибо.
Нормальный код. Проверь в дебаггере если "lpdi->hdr.hwndFrom" тот же хэндл, который пришёл из "CreateWindowEx"? P.S. Один из этих флагов должен быть включен (в dwStyle): LVS_SORTASCENDING, LVS_SORTDESCENDING.
Флаги ни один не был включен, включил, ничего не поменялось, все равно обработчик на бряк не срабатывает. Просто полтергейтс какой-то....
сабитемы нумеруются с нуля. Т.е. Код (Text): if (lpdi->iSubItem == 2) это по третьему столбцу и LVS_SORTASCENDING, LVS_SORTDESCENDING не нужны
Зачем ? Я обрабатываю, LVN_COLUMNCLICK, все срабатывает, я отправляю ListView_SortItems(lpdi->hdr.hwndFrom, (LPARAM)Sort_by_ip, (LPARAM)lpdi->iSubItem); но функция Sort_by_ip не вызывается ! (((( lpdi->iSubItem тут нипричем.
DEADC0DE бряк здесь не срабатывает ... я обрабатываю, LVN_COLUMNCLICK, все срабатывает Либо давай код, либо сам смотри в отладчике.
Так выше ведь написал весь код отвечающий за ListView )) Единственное то что окно создается в классе, а функция обработки int CALLBACK Sort_by_ip(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { return 1; // для теста - бряк здесь не срабатывает } находится все класса. Хотя там класс какой-то странный (код не мой, просто дописываю): struct GWindow { int height,width; RECT ListViewRect; void create(int w,int h,char *), mainloop(void); static HWND CreateButton (LPRECT rct, char *name, int comd); static HWND CreateListView(LPRECT rct, char *name, int comd); static HWND CreateEditBox (LPRECT rct, char *name, int comd); static void OnSize (LPARAM lParam), OnCommand(WPARAM wParam,LPARAM lParam); static LRESULT CALLBACK winproc(HWND ,UINT, WPARAM, LPARAM); public: static HWND hWnd, hWndListView,hWndEditBox; static DWORD buttonXStyle; };