如何在ListView控件中找到项目?

时间:2011-04-16 19:18:19

标签: c winapi listview ipc

我的列表视图包含3列名称,地址和电话号码。

我想检索特定名称的索引。

我正在使用ListView_FindItem宏来查找索引号,但是当我的代码到达此行时,它会崩溃程序。

它只是说Payroll已经停止工作了。 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宏,但程序仍然崩溃。

  

注意:以上代码不属于   工资单申请。我的意思是说   工资单申请表有   listview,我正在尝试搜索   来自其他申请的项目。

有人可以指出我正确的方向吗?

感谢。

1 个答案:

答案 0 :(得分:2)

您的描述有点不清楚,但我将其解释为您正在将LVM_FINDITEM消息(通过ListView_FindItem()宏)发送到不同进程的窗口。

这对于这个特定的Windows消息根本不起作用,因为它传递一个指向调用进程中结构的指针,当在另一个进程(拥有列表视图的工资单应用程序)的上下文中进行解释时,该指针毫无意义。

要解决您的问题,您可以在其他进程中分配内存,尽管这是一项非常复杂的任务。可以在代码项目文章Stealing Program's Memory中找到该技术的常用示例。

也许更简单的方法是使用WM_COPYDATA,它将在进程之间封送字符串数据。如果没有足够的灵活性,那么你需要找到另一种IPC机制,例如:命名管道。