zeebit 发表于 2008-5-10 15:15:35

ListView中右键菜单问题

$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 编辑 ]

sanhen 发表于 2008-5-10 15:47:09

GUICtrlCreateListView是很早AU3就内置的一个函数。
_GUICtrlListView_Create()是后来内置在头文件中的一个函数。是调用API写成的。
至于二者之间的区别,不是很清楚。不过习惯是用GUICtrlCreateListView来创建。

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

_GUICtrlMenu_CreatePopup()

pcbar 发表于 2008-5-10 20:13:18

当捕捉到右键单击时,触发菜单,我是这样做的,
见我的QQ登录器

zeebit 发表于 2008-5-10 20:47:15

原帖由 sanhen 于 2008-5-10 15:47 发表 http://www.autoitx.com/images/common/back.gif
GUICtrlCreateListView是很早AU3就内置的一个函数。
_GUICtrlListView_Create()是后来内置在头文件中的一个函数。是调用API写成的。
至于二者之间的区别,不是很清楚。不过习惯是用GUICtrlCreateListView来创建。 ...
谢谢三恨,
本来我是用GUICtrlCreateListView,后来好像是想清空Listview中的所有项目时,只找到_GUICtrlListView_DeleteAllItems,所以换成了_GUICtrlListView_Create

原帖由 pcbar 于 2008-5-10 20:13 发表 http://www.autoitx.com/images/common/back.gif
当捕捉到右键单击时,触发菜单,我是这样做的,
见我的QQ登录器
谢谢版主,我来学习一下你的程序

Amu 发表于 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

ken0137 发表于 2008-5-11 12:49:36

难道_GUICtrlListView_DeleteAllItems($ListView1)不能清空GUICtrlCreateListView创建的$ListView1吗!!!

zeebit 发表于 2008-5-11 13:21:02

原帖由 ken0137 于 2008-5-11 12:49 发表 http://www.autoitx.com/images/common/back.gif
难道_GUICtrlListView_DeleteAllItems($ListView1)不能清空GUICtrlCreateListView创建的$ListView1吗!!!
是啊,提示好像是_GUICtrlListView_DeleteAllItems不能删除非UDF建立的Listview

sanhen 发表于 2008-5-11 17:24:24

回复 6# ken0137 的帖子

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

如果不行,请尝试这样:
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($Processlistview))

zeebit 发表于 2008-5-12 09:10:19

谢谢三恨,我再试试

seebbs 发表于 2009-6-22 01:52:09

:face (23):

iamwonvy 发表于 2010-2-21 13:07:36

谢谢了 我也不小心学习了

浪迹红客 发表于 2011-3-13 14:23:50

学习了,楼主

雨林GG 发表于 2011-6-12 05:12:40

很好的资料~

silvay22 发表于 2013-4-21 10:22:27

很不错的文章学习了

sdc7 发表于 2013-7-18 13:03:09

$hListview1 = GUICtrlCreateListView
$hListview=GUICtrlGetHandle($hListview1)是等于_GUICtrlListView_Create创建的句柄的·
页: [1] 2
查看完整版本: ListView中右键菜单问题