思考,如何取得listview控件的状态(已解决)
本帖最后由 tubaba 于 2016-7-7 09:55 编辑好吧,其实这个问题还是没解决.重新发一次大家思考一下
以下是函数的解释
GUICtrlGetState ( controlID )
与 GUICtrlRead() 不同, 本函数仅返回控件状态:
enabled = 激活
disabled = 禁用
hidden = 隐藏
show = 显示
dropaccepted = 接受拖放
例外:
对于 ListView 控件, 本函数将返回点击的列号.
那么问题来了:如何取得 ListView 控件的状态.显示?隐藏?禁用?启用?
看起来好象不是问题,但是仔细想一下,还真有点复杂
使用ControlCommand命令,可以得到listview的状态.但是....
但是ControlCommand使用有局限性.必须控件在激活状态. 大家可以猜出GUICtrlGetState是调用了哪个API吗? ControlListView ( "标题", "文本", 控件ID, "命令" [, 选项1 [, 选项2]] )
命令, 选项1, 选项2 结果
"DeSelect", 从 [, 到] 取消一个或多个项目.
"FindItem", "搜索字符串" [, 子项目] 返回字符串项目索引. 若未找到指定字符串,则返回 -1.
"GetItemCount" 返回列表项目的数量.
"GetSelected" [, 选择] 返回选中项目的索引. 如果"选择" = 0 (默认) 则返回第一个选中的项目.
如果"选择" = 1 则返回由 "|" 分隔的所有选中项目, 例如: "0|3|4|10".
如果没有选中任何项目, 则返回空字符串 "".
"GetSelectedCount" 返回选中项目的数量.
"GetSubItemCount" 返回子项目数量.
"GetText", 项目, 子项目 返回指定项目/子项目的文本.
"IsSelected", 项目 项目选中则返回 1, 否则返回值 0.
"Select", 从[, 到] 选中一或多个项目.
"SelectAll" 选中所有项目.
"SelectClear" 清除所有项目的选中状态.
"SelectInvert" 切换当前选择.
"ViewChange", "视图" 切换当前视图样式. 包括:
"list"(列表), "details"(详细信息),
"smallicons"(小图标), "largeicons"(大图标).
所有项目/子项目基于 0 开始计算. 即第一个项目/子项目为 0, 第二个为 1, 依此类推.
ListView32 的 "details"(详细信息)视图中, 可以将 "行" 看作项目, 将 "列" 看作子项. 返回的结果取决于命令, 如下表所列. 若发生错误(如命令无效或找不到窗口/控件),则 @error = 1. 回复 1# tubaba
比較好奇的是你要取得自己寫的程式的 LISTVIEW 是 ENABLE還是 DISABLE
還是 第三方程式的?? 回复 5# kk_lee69
自己程式内的 回复 6# tubaba
自己程式 難道無法判定這時候 LISTVIEW 狀態是如何嗎??
當然如果你只是純粹想了解 語法問題 當然就無可厚非
不然 實務上 應該很多方法 都可以記錄目前的 LISTVIEW 狀態吧 回复 7# kk_lee69
哪你有啥好办法呢?在未知此控件状态下如何查询listview状态. 自己写的,定个返回值就好啦 回复 8# tubaba
所有程式一開始 都是 ENABLE 的 你設個專屬的變數 設為 0
當你 DISABLE 的時候 就將變數 設為 1
當你 ENALBE 的時候就將變數設為 0
你查那個變數 就知道目前狀態不是 回复 10# kk_lee69
靠人工计总不是那么可靠,这种方法是下下之策 回复 11# tubaba
那我就不會了 呵呵 我只會最不可靠的方法 本帖最后由 nmgwddj 于 2016-7-6 18:37 编辑
https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms646303(v=vs.85).aspx
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 267, 223)
$ListView1 = GUICtrlCreateListView("1|2|3", 8, 8, 250, 150)
$Button1 = GUICtrlCreateButton("Button1", 88, 176, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
MsgBox(0, '', IsWindowEnable(GUICtrlGetHandle($ListView1)) ? "启用" : "禁用")
GUICtrlSetState($ListView1, $GUI_DISABLE)
MsgBox(0, '', IsWindowEnable(GUICtrlGetHandle($ListView1)) ? "启用" : "禁用")
EndSwitch
WEnd
Func IsWindowEnable($hWnd)
Local $bIsEnable = True
Local $bRet = DllCall('User32.dll', 'bool', 'IsWindowEnabled', 'hwnd', $hWnd)
If Not @error Then
$bIsEnable = $bRet
EndIf
Return $bIsEnable
EndFunc
https://www.autoitscript.com/autoit3/docs/libfunctions/_WinAPI_IsWindowEnabled.htm
#include <WinAPISys.au3>
_WinAPI_IsWindowEnabled ( $hWnd ) 回复 14# nmgwddj
谢谢回答,其实这个函数我以前试过的.可能什么地方出错了.没达到预期效果,我以为不行.今天一试又行了,{:face (356):}#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 267, 223)
$ListView1 = GUICtrlCreateListView("1|2|3", 8, 8, 250, 150)
$Button1 = GUICtrlCreateButton("查看", 68, 176, 75, 25)
$Button2 = GUICtrlCreateButton("更改状态", 150, 176, 75, 25)
$radio1 = GUICtrlCreateRadio("radio1", 88, 202, 75, 25)
$radio2 = GUICtrlCreateRadio("radio2", 170, 202, 75, 25)
Local $Showhide, $Enabledisable
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
MsgBox(0, '', IsWindowEnable(GUICtrlGetHandle($ListView1)) ? "启用" : "禁用")
MsgBox(0, '', IsWindowVisible(GUICtrlGetHandle($ListView1)) ? "显示" : "隐藏")
Case $Button2
If Random(0, 1, 1) Then
$Showhide = $GUI_SHOW
Else
$Showhide = $GUI_HIDE
EndIf
If Random(0, 1, 1) Then
$Enabledisable = $GUI_ENABLE
Else
$Enabledisable = $GUI_DISABLE
EndIf
GUICtrlSetState($ListView1, BitOR($Showhide,$Enabledisable))
EndSwitch
WEnd
Func IsWindowEnable($hWnd)
Local $aRet = DllCall('user32.dll', 'bool', 'IsWindowEnabled', 'hwnd', $hWnd)
If @error Then Return SetError(@error, @extended, False)
Return $aRet
EndFunc
Func IsWindowVisible($hWnd)
Local $aResult = DllCall("user32.dll", "bool", "IsWindowVisible", "hwnd", $hWnd)
If @error Then Return SetError(@error, @extended, 0)
Return $aResult
EndFunc
页:
[1]
2