ListView_SortItems не работает

Тема в разделе "WASM.WIN32", создана пользователем DEADC0DE, 6 ноя 2008.

  1. DEADC0DE

    DEADC0DE New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2008
    Сообщения:
    17
    Доброе время суток уважаемые!

    Есть 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; // для теста - бряк здесь не срабатывает
    }

    Ума не приложу в чем может быть дело. Помогите советом если где ошибся.
    Спасибо.
     
  2. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Нормальный код. Проверь в дебаггере если "lpdi->hdr.hwndFrom" тот же хэндл, который пришёл из "CreateWindowEx"?

    P.S. Один из этих флагов должен быть включен (в dwStyle): LVS_SORTASCENDING, LVS_SORTDESCENDING.
     
  3. DEADC0DE

    DEADC0DE New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2008
    Сообщения:
    17
    Флаги ни один не был включен, включил, ничего не поменялось, все равно обработчик на бряк не срабатывает. Просто полтергейтс какой-то....
     
  4. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    сабитемы нумеруются с нуля. Т.е.
    Код (Text):
    1. if (lpdi->iSubItem == 2)
    это по третьему столбцу

    и LVS_SORTASCENDING, LVS_SORTDESCENDING не нужны
     
  5. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Ну, так и обрабатывай HDN_ITEMCLICK
     
  6. DEADC0DE

    DEADC0DE New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2008
    Сообщения:
    17
    Зачем ?
    Я обрабатываю, LVN_COLUMNCLICK, все срабатывает, я отправляю
    ListView_SortItems(lpdi->hdr.hwndFrom, (LPARAM)Sort_by_ip, (LPARAM)lpdi->iSubItem);
    но функция Sort_by_ip не вызывается ! (((( lpdi->iSubItem тут нипричем.
     
  7. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    DEADC0DE
    бряк здесь не срабатывает ... я обрабатываю, LVN_COLUMNCLICK, все срабатывает
    Либо давай код, либо сам смотри в отладчике.
     
  8. DEADC0DE

    DEADC0DE New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2008
    Сообщения:
    17
    Так выше ведь написал весь код отвечающий за 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;
    };
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    DEADC0DE
    Не хочешь давать свой код, смотри мой.
     
  10. DEADC0DE

    DEADC0DE New Member

    Публикаций:
    0
    Регистрация:
    23 апр 2008
    Сообщения:
    17
    Спасибо!
    Если ничего не получится выложу исходники...