2016-11-06 46 views
0

我想從SysListView32使用LVM_GETITEMTEXT獲取數據,但我只是得到一個空字符串。它給我的字符數,但不顯示實際的文字。任何人都可以幫忙嗎?代碼如下從SysListView32獲取數據

Private Const LVM_FIRST As Long = &H1000 
Private Const LVM_GETITEMTEXT As Long = (LVM_FIRST + 45) 

Private Type LV_ITEM 
    mask   As Long 
    iItem  As Long 
    iSubItem  As Long 
    state  As Long 
    stateMask As Long 
    pszText  As String 
    cchTextMax As Long 
    iImage  As Long 
    lParam  As Long 
    iIndent  As Long 
End Type 

Dim lvi As LV_ITEM 
Dim r as long 

lvi.cchTextMax = MAX_PATH 
lvi.pszText = Space$(MAX_PATH) 

r = SendMessage(Handle, LVM_GETITEMTEXT, 0, lvi) 

data = Left(lvi.pszText, r) 

If Trim(data) <> "" Then MsgBox (data) 

回答

0

need to set the LVIF_TEXT flagpszText點聲明一個有效的緩衝。

Private Const LVIF_TEXT As Long = &H1 
lvi.mask = LVIF_TEXT 
lvi.cchTextMax = MAX_PATH 
lvi.pszText = Space$(MAX_PATH) 
+0

感謝這一點,但仍然沒有喜悅,仍然得到一個空字符串。 – Amir

+0

@Amir如何聲明SendMessage,什麼是'r',列表視圖不包含[LVS_OWNERDATA](https://msdn.microsoft.com/en-us/library/windows/desktop/bb774739 (v = vs.85).aspx#LVS_OWNERDATA)風格? – GSerg

+0

Private Declare Function SendMessage Lib「user32」Alias「SendMessageA」(ByVal hWnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any)只要 – Amir