在使用P版的ListViewEditEvent这个UDF的时候,遇到了一个问题,就在在编辑的时候,使用鼠标右键时,不能完全显示出EDIT系统右键菜单。
图如下:
这是我在WIN7系统上使用时候的截图,右键菜单上,鼠标经过时候还能显示出文字来,但是在xp系统上,鼠标经过也不能显示出文字
希望能解决一下!是什么地方出现了问题
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <ListViewEditEvent.au3>
#include <GuiMenu.au3>
#include <ComboConstants.au3>
#include <GuiTab.au3>
#include <GuiComboBoxEx.au3>
#include <GuiButton.au3>
#include <GuiImageList.au3>
Opt("GUIOnEventMode", 1)
$gui = GUICreate("test", 721, 647, -1, -1)
$hImage = _GUIImageList_Create(1, 18)
$wuliao_listview = GUICtrlCreateListView("序号|物料编号", 4, 280, 710, 358, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($wuliao_listview, BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES));, $LVS_EX_TRACKSELECT
_GUICtrlListView_SetColumn($wuliao_listview, 0, "序号", 40, 2)
_GUICtrlListView_SetColumn($wuliao_listview, 1, "物料编号", 100, 2)
_GUICtrlListView_SetImageList($wuliao_listview, $hImage, 1)
GUICtrlCreateListViewItem("0|0", $wuliao_listview)
_GUICtrlListView_RegisterEditEvent($wuliao_listview)
GUISetOnEvent($GUI_EVENT_CLOSE, "out");退出
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY");注册系统消息,列表视图框的修改和菜单
#EndRegion ### END Koda GUI section ###
While 1
Sleep(10)
WEnd
Func out()
ProcessClose(@AutoItPID)
Exit
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $tBuffer, $iCode, $iItem, $iSubItem, $hWndFrom
$tBuffer = DllStructCreate($tagNMLISTVIEWHDR, $ilParam)
$iCode = DllStructGetData($tBuffer, "Code")
$hWndFrom = HWnd(DllStructGetData($tBuffer, "hWndFrom"))
Switch $iCode
Case $LVN_EDITBEGIN ; 将要开始编辑。
Local $tEditBegin = DllStructCreate($tagLISTVIEW_EDITBEGIN, $ilParam)
$iItem = DllStructGetData($tEditBegin, "Item")
$iSubItem = DllStructGetData($tEditBegin, "SubItem")
; 判断是否为SubItem 0,若是,拒绝编辑。
If ($iSubItem = 0) Then
DllStructSetData($tEditBegin, "Show", 0)
Else
DllStructSetData($tEditBegin, "Show", 1) ; 此句可以删除,因为默认就是为1.
EndIf
Case $LVN_EDITEND ; 结束编辑。
Local $tEditEnd, $iFlags
$tEditEnd = DllStructCreate($tagLISTVIEW_EDITEND, $ilParam)
$iFlags = DllStructGetData($tEditEnd, "EndFlags")
; 判断是否输入enter键结束,若非,不保存编辑结果。
; If ($iFlags <> $LVEF_ENTER) Then
; DllStructSetData($tEditEnd, "AutoComplete", 0)
; Else
; DllStructSetData($tEditEnd, "AutoComplete", 1)
; EndIf
; 以上的2句DllStructSetData,可以删除其中一句,
; 因为AutoComplete的值默认为_GUICtrlListView_RegisterEditEvent中$fAutoComplete的值。
Case $LVN_SELCHANGING ; 所选条目即将发生改变。
Local $tChanging, $iFlags
$tChanging = DllStructCreate($tagLISTVIEW_SELCHANGING, $ilParam)
$iFlags = DllStructGetData($tChanging, "ChangeFlags")
; 判断是否是鼠标选择,若否,拒绝选择。
;If ($iFlags <> $LVCF_LBUTTON) And ($iFlags <> $LVCF_RBUTTON) Then
; DllStructSetData($tChanging, "AllowChange", 0)
;EndIf
Case $LVN_SELCHANGED ; 所选条目已经改变。
Local $tChanged, $iItem, $iPreviousItem, $iFlags, $sFlags = "Left"
$tChanged = DllStructCreate($tagLISTVIEW_SELCHANGED, $ilParam)
$iItem = DllStructGetData($tChanged, "CurrentItem") ; 当前所选。
$iPreviousItem = DllStructGetData($tChanged, "PreviousItem") ; 之前所选。
$iFlags = DllStructGetData($tChanged, "ChangeFlags") ; 选择标识。
If ($iFlags = $LVCF_RBUTTON) Then $sFlags = "Right"
Case $LVN_ITEMCHECKING ; CheckBox 状态即将改变。
Local $tChecking, $iFlags
$tChecking = DllStructCreate($tagLISTVIEW_ITEMCHECKING, $ilParam)
$iFlags = DllStructGetData($tChecking, "Flags")
$iItem = DllStructGetData($tChecking, "Item")
; 判断是否为第9条目,或是否不使用鼠标左键进行选择,若成立,拒绝CheckBox的选择。
;If ($iFlags <> $LVICF_LBUTTON) Or ($iItem = 9) Then
; DllStructSetData($tChecking, "AllowCheck", 0)
;EndIf
Return 0 ; allow the default processing
EndSwitch
$tBuffer = 0
EndFunc ;==>WM_NOTIFY
|