-
-
[旧帖]
汇编中如何响应Listview中点击右键菜单的消息?
0.00雪花
-
发表于:
2010-1-30 00:17
3855
-
[旧帖] 汇编中如何响应Listview中点击右键菜单的消息?
0.00雪花
如下面,我在启动时候初始化了一个右键菜单,然后在列表框中点击右键就弹出右键快捷菜单。但是在我想点击菜单的时候,该怎么做?我知道在主窗体中用WM_COMMAND中处理代码,但是在列表框中怎么判断用户点击了右键菜单的哪个项?
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
LOCAL @szBuffer[512]:byte
LOCAL @stPos:POINT
mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG
push hWnd
pop hWinMain
invoke _InitListView
invoke _GetDir,addr szName
;初始化菜单
invoke CreatePopupMenu
mov hMenu,eax
invoke AppendMenu,hMenu,MF_STRING,IDM_MENU1,offset szHeading1
invoke AppendMenu,hMenu,MF_STRING,IDM_MENU2,offset szHeading2
.elseif eax == WM_NOTIFY
mov edi,lParam
assume edi:ptr NMHDR
mov eax,[edi].hwndFrom
.if eax == hWndListView
;右键弹出菜单
.if [edi].code == NM_RCLICK
invoke GetCursorPos,addr @stPos
invoke TrackPopupMenu,hMenu,TPM_LEFTALIGN,@stPos.x,@stPos.y,NULL,hWndListView,NULL
;响应左键点击菜单消息,但是无响应,该如何解决?
.elseif [edi].code == NM_CLICK
mov eax,wParam
.if ax == IDM_MENU1
invoke MessageBox,hWnd,addr szHeading1,addr szHeading1,MB_OK
.elseif ax == IDM_MENU2
invoke MessageBox,hWnd,addr szHeading2,addr szHeading2,MB_OK
.endif
.endif
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
下面是全部代码,可以下载调试
Test.rar
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)