找回密码
 加入
搜索
查看: 3043|回复: 3

[AU3基础] 双击事件,在WIN7 64下失效的问题

[复制链接]
发表于 2014-2-16 21:35:55 | 显示全部楼层 |阅读模式
论坛中的源码例子:

在WIN7 64下测试,双击无反映,求助!

[/au3]#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListView.au3>

$Form1 = GUICreate("Form1", 410, 310)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

$ListView1 = GUICtrlCreateListView("||", 8, 8, 400, 300)
GUISetState(@SW_SHOW)
For $I = 1 To 10
        GUICtrlCreateListViewItem($I, $ListView1)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)

        Local $tagNMHDR, $Event, $hWndFrom, $IDFrom
        Local $tagNMHDR = DllStructCreate("int;int;int", $LParam)
        If @error Then Return $GUI_RUNDEFMSG
        $IDFrom = DllStructGetData($tagNMHDR, 2)
        $Event = DllStructGetData($tagNMHDR, 3)
        $tagNMHDR = 0
        Switch $IDFrom;选择产生事件的控件
               
                Case $ListView1

                        Switch $Event; 选择产生的事件
                                
                                Case $NM_CLICK ; 左击
;~                                      ...
                                       
                                Case $NM_DBLCLK ; 双击
                                        $Index = _GUICtrlListView_GetSelectedIndices($ListView1)
                                        If Not StringLen($Index) Then; 这里用以判断是否选定了ListViewItem
                                                MsgBox(0, "", "未选定")
                                                Return
                                        EndIf
                                        MsgBox(0,0, _GUICtrlListView_GetItemText($ListView1, Number($Index), 0))
                                       
                                Case $NM_RCLICK ; 右击
;~                                      ...
                        EndSwitch
                        
        EndSwitch
        
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
[/au3]
发表于 2014-2-17 16:41:35 | 显示全部楼层
把脚本改成32位方式运行,右键脚本文件-编译脚本(带选项),选择x86就行了。
或者在脚本头部增加 #PRE_UseX64=n
发表于 2014-2-17 21:58:41 | 显示全部楼层
本帖最后由 tubaba 于 2014-2-17 22:09 编辑
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GUIListView.au3>

$Form1 = GUICreate("Form1", 410, 310)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

$ListView1 = GUICtrlCreateListView("||", 8, 8, 400, 300)
GUISetState(@SW_SHOW)
For $I = 1 To 10
        GUICtrlCreateListViewItem($I, $ListView1)
Next

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam)
        Local $hWndFrom, $IDFrom, $iCode, $tNMHDR
        $tNMHDR = DllStructCreate($tagNMHDR, $LParam)
        $IDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $IDFrom;选择产生事件的控件
                Case $ListView1

                        Switch $iCode; 选择产生的事件
                                
                                Case $NM_CLICK ; 左击
;~                                      ...
                                        
                                Case $NM_DBLCLK ; 双击
                                        $Index = _GUICtrlListView_GetSelectedIndices($ListView1)
                                        If Not StringLen($Index) Then; 这里用以判断是否选定了ListViewItem
                                                MsgBox(0, "", "未选定")
                                                Return
                                        EndIf
                                        MsgBox(0,0, _GUICtrlListView_GetItemText($ListView1, Number($Index), 0))
                                        
                                Case $NM_RCLICK ; 右击
;~                                      ...
                        EndSwitch
                        
        EndSwitch
        
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
$tagNMHDR = DllStructCreate("int;int;int", $LParam)
应该是这句有问题吧,数据类型应该是hwnd;uint_ptr;int
帮助里有

$tagNMHDR
包含一个关于通知消息的信息


Global Const $tagNMHDR = "struct; hwnd hWndFrom;uint_ptr IDFrom;INT Code; endstruct"


参数
hWndFrom 进行发送消息的目标控件所在的窗口的窗口句柄.
IDFrom 进行发送消息的目标控件的控件标识.
Code 通知代码,这个成员可以是一个公共通知代码(常规控件通知参考),或者控件本身的特殊通知代码.
 楼主| 发表于 2014-2-18 02:03:58 | 显示全部楼层
谢谢楼上2位,我今天测试又可以了,很郁闷..同样的系统,同样的版本
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 22:50 , Processed in 0.071695 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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