找回密码
 加入
搜索
查看: 8581|回复: 11

ListView中右键菜单问题

  [复制链接]
发表于 2008-5-10 15:15:35 | 显示全部楼层 |阅读模式
$ListView1 = GUICtrlCreateListView("计算机|IP地址|MAC地址", 2, 96, 585, 465)
$menu1 = GUICtrlCreateContextMenu($ListView1)
$menu_01 = GUICtrlCreateMenuItem("删除", $menu1)

用以上方法可以在ListView上建立右键菜单

但ListView用_GUICtrlListView_Create()建立的话,为什么用上面的方法不能建立右键菜单?

是因为1个是用户自定义函数,另1个不是?
如果是这样,那有没有建立右键菜单的用户自定义函数?(找了好几圈,都没找到哇)

[ 本帖最后由 zeebit 于 2008-5-12 09:10 编辑 ]
发表于 2008-5-10 15:47:09 | 显示全部楼层
GUICtrlCreateListView是很早AU3就内置的一个函数。
_GUICtrlListView_Create()是后来内置在头文件中的一个函数。是调用API写成的。
至于二者之间的区别,不是很清楚。不过习惯是用GUICtrlCreateListView来创建。

右键菜单的话GUICtrlCreateContextMenu是不支持_GUICtrlListView_Create的。
但是不建议用_GUICtrlListView_Create。当然非要用。可以考虑下_开头的函数。
如:

_GUICtrlMenu_CreatePopup()
发表于 2008-5-10 20:13:18 | 显示全部楼层
当捕捉到右键单击时,触发菜单,我是这样做的,
见我的QQ登录器
 楼主| 发表于 2008-5-10 20:47:15 | 显示全部楼层
原帖由 sanhen 于 2008-5-10 15:47 发表
GUICtrlCreateListView是很早AU3就内置的一个函数。
_GUICtrlListView_Create()是后来内置在头文件中的一个函数。是调用API写成的。
至于二者之间的区别,不是很清楚。不过习惯是用GUICtrlCreateListView来创建。 ...

谢谢三恨,
本来我是用GUICtrlCreateListView,后来好像是想清空Listview中的所有项目时,只找到_GUICtrlListView_DeleteAllItems,所以换成了_GUICtrlListView_Create

原帖由 pcbar 于 2008-5-10 20:13 发表
当捕捉到右键单击时,触发菜单,我是这样做的,
见我的QQ登录器

谢谢版主,我来学习一下你的程序
发表于 2008-5-11 02:49:37 | 显示全部楼层
这个给你参考参考。
#include <GUIConstants.au3>
;~ #include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#Include <GuiRebar.au3>
#include <GuiToolBar.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <GuiMenu.au3>
#Include <GuiStatusBar.au3>
#include <Constants.au3>

Global $idMenuInsert = 1000

$Gui = GUICreate("测试", 320, 200)

$hListView = _GUICtrlListView_Create($GUI, "连接数(0)", 10, 10, 300, 180, -1, $WS_EX_CLIENTEDGE)

_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))

_GUICtrlListView_SetColumnWidth($hListView, 0, 295)

$hMenu = _GUICtrlMenu_CreatePopup()

_GUICtrlMenu_InsertMenuItem($hMenu, 0, "添加连接", $idMenuInsert)

GUISetState()

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
        ExitLoop
    EndSwitch
WEnd

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iCode, $tNMHDR, $hWndListView, $iItemCount
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
    Case $hWndListView
        Switch $iCode
            Case $NM_RCLICK
                If _GUICtrlMenu_TrackPopupMenu($hMenu, $hListView, -1, -1, 1, 1, 2) = $idMenuInsert Then
                    _GUICtrlListView_InsertItem($hListView, "www.autoitx.com")
                    $iItemCount = _GUICtrlListView_GetItemCount($hListView)
                    _GuiCtrlListView_SetColumn($hListView, 0, "连接数(" & $iItemCount & ")")
                EndIf
        EndSwitch
    EndSwitch
   
    Return $GUI_RUNDEFMSG
EndFunc
发表于 2008-5-11 12:49:36 | 显示全部楼层
难道_GUICtrlListView_DeleteAllItems($ListView1)不能清空GUICtrlCreateListView创建的$ListView1吗!!!
 楼主| 发表于 2008-5-11 13:21:02 | 显示全部楼层
原帖由 ken0137 于 2008-5-11 12:49 发表
难道_GUICtrlListView_DeleteAllItems($ListView1)不能清空GUICtrlCreateListView创建的$ListView1吗!!!

是啊,提示好像是_GUICtrlListView_DeleteAllItems不能删除非UDF建立的Listview
发表于 2008-5-11 17:24:24 | 显示全部楼层

回复 6# ken0137 的帖子

可以的。一直用这个。从来没试过清除不了的。

如果不行,请尝试这样:
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($Processlistview))
 楼主| 发表于 2008-5-12 09:10:19 | 显示全部楼层
谢谢三恨,我再试试
发表于 2009-6-22 01:52:09 | 显示全部楼层
发表于 2010-2-21 13:07:36 | 显示全部楼层
谢谢了 我也不小心学习了
发表于 2011-3-13 14:23:50 | 显示全部楼层
学习了,楼主
发表于 2011-6-12 05:12:40 | 显示全部楼层
很好的资料~
发表于 2013-4-21 10:22:27 | 显示全部楼层
很不错的文章学习了
发表于 2013-7-18 13:03:09 | 显示全部楼层
$hListview1 = GUICtrlCreateListView
$hListview=GUICtrlGetHandle($hListview1)是等于_GUICtrlListView_Create创建的句柄的·
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 17:30 , Processed in 0.097824 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表