如何在ListView控件中找到项?

我的列表视图包含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,我正在尝试从其他应用程序中搜索该项目。

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

谢谢。

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

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

要解决您的问题,您可以在其他进程中分配内存,尽管这是一项非常复杂的任务。 这个技术的一个常见例子可以在Code Project文章Stealing Program’s Memory中找到 。

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