Как определить какой пункт ListView выбран

Тема в разделе "WASM.BEGINNERS", создана пользователем strange2007, 26 ноя 2010.

  1. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Добрый день. У меня маленький вопрос самого начинающего программера: как узнать, какой пункт выбран у ListView? Везде идут примеры с определением текста, а мне надо какой-то идентификатор, но не порядковый номер, т.к. строки могут сортироваться.
    Думается что надо свойству imask поставить значение отличное от LVIF_TEXT (это структура LV_ITEM), что-то не могу понять принцип. Опять же, какое свойство при создании означает идентификатор? По ин.язу у меня двойка, поэтому маленько не до конца понял принцип работы. Пожалуйста, подскажите вкратце как искать
     
  2. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    Код (Text):
    1. Каждому элементу класса LISTBOX отводится дополнительных 4 байта = DWord,
    2. в которые программист может вносить свои данные, и в случае необходимости - прочитать их.
    3.  
    4. записать:
    5.         invoke  MessageBoxA,окно_списка,LB_SETITEMDATA,номер_элемента_списка_начиная_с_0,желаемое_значение
    6. прочитать:
    7.         invoke  MessageBoxA,окно_списка,LB_GETITEMDATA,номер_элемента_списка_начиная_с_0,0
     
  3. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    edemko
    Направление понял, пошел глядеть. Подскажите, пожалуйста, может вместо MessageBox подставлять SendMessage?
     
  4. edemko

    edemko New Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2009
    Сообщения:
    454
    SendMessage
     
  5. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    edemko, человеку про ListView надо. А ListBox - это совсем другая история, он простой, как кирзовый сапог.

    Мысля, значит, такая: для каждого элемента нужно вызвать LVM_GETITEMSTATE с lParam=LVIS_SELECTED, и если сообщение вернёт что-то, отличное от нуля, значит, соотв. пункт выбран. Можно и через LVM_GETITEM, но там надо структуру заполнять.
     
  6. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    А я и думаю, что же оно не получается то...
     
  7. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Уважаемые специалисты, подскажите тогда про LVM_GETITEM. Только там мне надо не конструкцию
    mov lvi.imask,LVIF_TEXT
    а какое-то другое значение вместо LVIF_TEXT, подскажите что использовать
     
  8. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    И еще вопрос: расскажите на пальцах как работает iItem и как iSubItem? Во всех источниках одно и тоже- непонятно! Если я создаю одно только поле, в котором 3 записи, то у меня так будет правильно?
    iItem iSubItem
    0 1
    0 2
    0 3

    А если так:
    iItem iSubItem
    0 1
    1 8
    1 16

    что второе означает? Я пока не могу разобраться что к чему
     
  9. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    Интересный параметр lParam. Его можно использовать как GUID? Вроде при перемещении строк он не меняется же? Если так, то как его получить?
    lParam - определяемое пользователем значение, которое будет использоваться, когда вы будете сортировать элементы в listview. Кратко говоря, когда вы будете указывать listview отсортировать item'ы, listview будет сравнивать item'ы попарно. Он будет посылать значение lParam обоих элементов вам, чтобы вы могли pешить, какое из этих двух должно быть в списке идти pаньше.
     
  10. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    strange2007,

    В 32 бита влезет разве что микро-GUID. Так что ссылочки. Или атомы, для глобальности. :derisive:
     
  11. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    baldr
    гуид можно сделать и самодельный у которого размер даже в 8 бит более чем предостаточно. Поэтому мне надо хоть что-то похожее на уникальность, а не по всем стандартам. Что значит ссылочки? Что они из себя представляют? И... это... я не знаю что такое атомы на винапи, может в 2-х словах просвятите?
     
  12. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    strange2007,

    Это что ж за объекты, у которых глобально уникальных идентификаторов всего 256? :derisive:

    Под «ссылочки» имелись в виду указатели/адреса.

    Атом — 16-битный идентификатор для произвольной C-строки, может быть глобальным. RegisterClass(), к примеру, его возвращает. Подробнее, естественно, в MSDN.
     
  13. strange2007

    strange2007 New Member

    Публикаций:
    0
    Регистрация:
    9 ноя 2010
    Сообщения:
    126
    baldr, строк у меня не более 100, поэтому идентификатор глобальный в рамках одного списка :)
    Подскажите, как атом связывать со строкой?
     
  14. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    через lParam итема