Как найти элемент в элементе управления ListView? - PullRequest
2 голосов
/ 16 апреля 2011

Мой список содержит 3 столбца Имя, адрес и номер телефона.

Я хочу получить индекс для определенного имени.

Я использую макрос ListView_FindItem, чтобы найтипорядковый номер, но когда мой код попадает в эту строку, происходит сбой программы.

Это просто говорит, что заработная плата перестала работать.Windows может проверить в режиме онлайн решение этой проблемы.

Я уверен, что передал правую ручку макросу ListView_FindItem, но я не уверен насчет структуры LVFINDINFO.

Вот мой код

WCHAR szProcess[80] = {0};
LVFINDINFO item = {LVFI_STRING, (LPCTSTR) szProcess};

//code to find parent handles
...

//code to find index
index = ListView_FindItem(hwndListView, -1, &item);

Я не уверен насчет флага LVFI_STRING, и я даже пытался передать постоянную структуру LVFINDINFO в макрос ListView_FindItem, но моя программа вылетает.

Примечание. Приведенный выше код не является частью приложения для расчета заработной платы.Я имею в виду, что приложение для расчета заработной платы имеет вид списка, и я пытаюсь найти элемент из другого приложения.

Может ли кто-нибудь указать мне правильное направление?

Спасибо.

1 Ответ

2 голосов
/ 16 апреля 2011

Ваше описание немного неясно, но я понимаю, что вы отправляете сообщение LVM_FINDITEM (через макрос ListView_FindItem()) в окно другого процесса.

Это просто не работает для данного конкретного сообщения Windows, так как оно передает указатель на структуру в вызывающем процессе, которая не имеет смысла при интерпретации в контексте другого процесса (приложения для расчета заработной платы, которому принадлежит представление списка).

Чтобы решить вашу проблему, вы можете выделить память в другом процессе, хотя это довольно сложная задача. Наиболее часто цитируемый пример этого метода можно найти в статье проекта кода, Кража памяти программы .

Возможно, более простым подходом было бы использование WM_COPYDATA, который будет распределять строковые данные между процессами. Если это не имеет достаточной гибкости, то вам нужно будет найти другой механизм IPC, например, именованные трубы.

...