SendMessage lParam为空

时间:2010-09-14 09:15:56

标签: assembly sendmessage masm

我正在尝试将值存储在LV_ITEM的lParam中:

;...
mov eax, value
mov lvi.lParam, eax
invoke SendMessage, hList, LVM_INSERTITEM, 0 addr lvi

lvi是一个(LOCAL)LV_ITEM,而hList是我的ListView控件的句柄。如果现在单击此项目,我会尝试读取它的值:

invoke SendMessage,hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED
mov lvi.iItem, eax
mov lvi.iSubItem, 0
mov lvi.imask, LVIF_TEXT
mov lvi.cchTextMax,256
invoke SendMessage,hList,LVM_GETITEM, 0, addr lvi

再次lvi是一个(LOCAL)LV_ITEM,并且hList是ListView的句柄。 现在我可以阅读,例如pszText(lvi.pszText),但lParam始终为零。上次错误也返回零。

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

您是否将LV_ITEM的iMask设置为LVIF_TEXT+LVIF_PARAM?如果不是,则忽略LV_ITEM结构中的lParam。

;...
mov lvi.iMask, LVIF_TEXT+LVIF_PARAM
push value
pop lvi.lParam
invoke SendMessage, hList, LVM_INSERTITEM, 0 addr lvi

您还需要以相同的方式请求它:

invoke SendMessage,hList,LVM_GETNEXTITEM,-1,LVNI_FOCUSED
mov lvi.iItem, eax
mov lvi.iSubItem, 0
mov lvi.imask, LVIF_TEXT+LVIF_PARAM
mov lvi.cchTextMax,256
invoke SendMessage,hList,LVM_GETITEM, 0, addr lvi