在vc环境下。
已获得一TListView类的句柄,想把其某行(列)的内容读取出来,应当如何实现啊?若能读出某行列焦点的数据则更好。具体步骤如下:1) 获得句柄:HWND hwandTListView = FindWindowEx(hwndInboxList, NULL, "TListView", NULL);已成功;
2)获得hwandTListView 的长度,并读取某行(列):网上看了下代码,经过修改如下:
TListView ListView1 =(TListView)hwandTListView;//自己加的;error C2065: 'TListView' : undeclared identifier
  int i;  
  For i:=0 to ListView1.Items.Count-1 Do
  If ListView1.Items[i].Selected then //i=ListView1.Selected.index
  begin
  /读某行某列的操作:
  Edit1.Text := listview1.Items[i].Caption; //读第i行第1列
  Edit2.Text := listview1.Items[i].SubItems.strings[0]; //读第i行第2列
  Edit3.Text := listview1.Items[i].SubItems.strings[1]; //读第i行第3列
  //以次类推,可以用循环读出整列。   
  end;
  //将焦点上移一行:
  ListViewItemMoveUpDown(ListView1, ListView1.Selected, False, True);//下移  问题如下:
查了下,TListView 是delphi的概念,但对delphi只是了解。在应用TListView 前应该导入一些头文件或类吧,具体应该是哪些啊?  
或是可否转换成其他的List类型,然后再应用。现在只有这些思路,请高手指点,最好能写出关键代码,谢谢~把所有的分都拿出来了啊~~~~,在线等~~~~

解决方案 »

  1.   

    不能把句柄转换成delphi的类的
    可以对句柄发送消息LVM_GETITEMTEXT 来获得
      

  2.   

    int iItem=SendMessage(hwandTListView,LVM_GETNEXTITEM,-1,LVNI_SELECTED);
    if(iItem != -1) //找到句柄
    SendMessage(hwandTListView, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem); 是这样吗?此时plvitem得到的内容是什么?
    可否给出具体的代码?
      

  3.   


    补充下:
    主要想实现以下几步:
    1)获得句柄:HWND hwandTListView = FindWindowEx(hwndInboxList, NULL, "TListView", NULL);已成功;
    2)对应ListView表,自动选择某行(如第一行)
    3)选中某行后,点击“阅读”按钮,可实现:  ::SendMessage(hwndRead,BM_CLICK,0,0); 
    问题关键是第二步,网上查了下,有以下两中方法:方法1:(经测试不可行)
    ::SendMessage(hSelectBox,LB_SETCURSEL,i,0); //单选 
    ::SendMessage(hSelectBox,LB_SETSEL,1,i); //多选 方法2:(原帖说是可行) 
    //自动选中第一行m_UserList.SetItemState(   0,LVIS_SELECTED   |   LVIS_FOCUSED   ,   LVIS_SELECTED   |   LVIS_FOCUSED);   
    m_UserList.EnsureVisible(   0,FALSE);  LVIS_FOCUSED);   
    方法2中,m_UserList应该为CListCtrl类实例,但这个实例如何与句柄hwandTListView 关联起来?
    若能解决了这步,基本就解决了,望高手帮助~方法2原帖具体见:
    http://topic.csdn.net/u/20091117/10/e9714ead-d9ec-4698-a489-d1a603db8201.html
      

  4.   

    CListCtrl 是vc的类,
    你可以用FromHandle  从句柄来获取 CListCtrl*static CWnd* PASCAL FromHandle(
       HWND hWnd 
    );
    CListCtrl 是CWnd的继承类,做一下向下类型转换ok
      

  5.   

    非常感谢,现在已经实现了单击,但双击无法实现。代码如下:
    LVITEM lvitem, *plvitem;
    NMHDR nmhdr,*pnmhdr;        HANDLE hProcess;
            DWORD PID;
    WPARAM ListViewID = GetWindowLong(hwandTListView,GWL_ID); // 获取窗口PID、打开进程 
            GetWindowThreadProcessId(hwandTListView, &PID);
            hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
            if (!hProcess)
    {
    return;
    }
            else
            {
                DWORD dwOldProtect;
    /***************************单击*********************************************/
    // 申请内存空间
                plvitem = (LVITEM*)VirtualAllocEx(hProcess,NULL,sizeof(LVITEM),MEM_COMMIT,PAGE_READWRITE);
                lvitem.state=LVIS_SELECTED|LVIS_FOCUSED|LVIS_ACTIVATING;
                lvitem.stateMask=LVIS_SELECTED;

    //设置进程属性,并写进程
    VirtualProtectEx(hProcess, plvitem, sizeof(LVITEM), PAGE_READWRITE,&dwOldProtect);
                WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM),NULL);
               
    //发送消息
                ::SendMessage(hwandTListView,LVM_SETITEMSTATE,(WPARAM)0,(LPARAM)plvitem);

    /***************************双击*********************************************/
    // 申请内存空间,双击 
                pnmhdr = (NMHDR*)VirtualAllocEx(hProcess,NULL,sizeof(NMHDR),MEM_COMMIT,PAGE_READWRITE);
                nmhdr.code = NM_DBLCLK;
    nmhdr.hwndFrom = hwandTListView;
                nmhdr.idFrom = ListViewID;

    //设置进程属性,并写进程
    VirtualProtectEx(hProcess, pnmhdr, sizeof(NMHDR), PAGE_READWRITE,&dwOldProtect);
                WriteProcessMemory(hProcess, pnmhdr, &nmhdr, sizeof(NMHDR), NULL);  //发送消息
    ::PostMessage(::GetParent(hwandTListView),WM_NOTIFY,(WPARAM)ListViewID,(LPARAM)pnmhdr);
    /******************************************************************************/
    // 释放内存空间   
    VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);   
            
    注,调试双击时我把单击部分全部屏蔽了还是不行
      

  6.   

    此外,单击选中某行后,应该如何取消该选中,以选中其他的行,应该如何设置lvitem?
      

  7.   

    查一下ListView API,特别是针对Item的消息,“(取消)选择”记得是有消息的