xyhqqaa 发表于 2018-8-13 13:45:09

新手求教关于代码整合问题[已解决]

本帖最后由 xyhqqaa 于 2018-8-13 15:40 编辑

实现工具栏点击操作

Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $tNMHDR, $hWndFrom, $iCode, $tNMTOOLBAR, $iItem
      $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
      $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
      $iCode = DllStructGetData($tNMHDR, "Code")
      $tNMTOOLBAR = DllStructCreate($tagNMTOOLBAR, $lParam)
      $iItem = DllStructGetData($tNMTOOLBAR, "iItem")
      Switch $hWndFrom
                Case $mainToolBar
                        Switch $iCode
                              Case $NM_LDOWN
                                        Switch $iItem
                                                Case $ToolBar_new
                                                      $MSG_NOTIFY = "newuser"
                                                Case $ToolBar_del
                                                      $MSG_NOTIFY = "deluser"
                           EndSwitch
                        EndSwitch
      EndSwitch
      Return $GUI_RUNDEFMSG
EndFunc

实现listview点击操作

Func WM_NOTIFY($hWndGUI, $MsgID, $WParam, $LParam) ;判断listview双击事件
      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 $IDFrom = $ListView
                        Switch $Event ; 選擇產生的事件
                              Case $NM_CLICK ; 左擊
                              Case $NM_DBLCLK ; 雙擊
                              Case $NM_RCLICK ; 右擊
                        EndSwitch
      EndSwitch
EndFunc   ;==>WM_NOTIFY


新手请教下,是否可以将两段代码整合成一段。。求各位大佬指点!!






chishingchan 发表于 2018-8-13 14:06:30

高级会员是新手?!不会吧?!

tubaba 发表于 2018-8-13 14:57:59

为什么不仔细查看帮助呢?
Global Const $tagNMHDR = "struct; hwnd hWndFrom;uint_ptr IDFrom;INT Code; endstruct"
Global Const $tagNMTOOLBAR = $tagNMHDR & ";int iItem;" & _
"struct; int iBitmap;int idCommand;byte fsState;byte fsStyle;dword_ptr dwData;int_ptr iString; endstruct" & _
";int cchText;ptr pszText;" & $tagRECT
下面二种都可以
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)      Local $hWndFrom, $iCode, $tNMTOOLBAR, $iItem, $IDFrom      $tNMTOOLBAR = DllStructCreate($tagNMTOOLBAR, $lParam)      $hWndFrom = HWnd(DllStructGetData($tNMTOOLBAR, "hWndFrom"))      $IDFrom = (DllStructGetData($tNMTOOLBAR, "IDFrom")      $iCode = DllStructGetData($tNMTOOLBAR, "Code")      $iItem = DllStructGetData($tNMTOOLBAR, "iItem")      Switch $hWndFrom                Case $mainToolBar                        Switch $iCode                              Case $NM_LDOWN                                        Switch $iItem                                                Case $ToolBar_new                                                      $MSG_NOTIFY = "newuser"                                                Case $ToolBar_del                                                      $MSG_NOTIFY = "deluser"                                        EndSwitch                        EndSwitch      EndSwitch      Switch $IDFrom ;選擇產生事件的控制項                Case $ListView                        Switch $iCode ; 選擇產生的事件                              Case $NM_CLICK ; 左擊                              Case $NM_DBLCLK ; 雙擊                              Case $NM_RCLICK ; 右擊                        EndSwitch      EndSwitch      Return $GUI_RUNDEFMSGEndFunc   ;==>WM_NOTIFY

Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)      Local $hWndFrom, $iCode, $tNMTOOLBAR, $iItem, $IDFrom      Local $hListView = GUICtrlGetHandle($ListView)      $tNMTOOLBAR = DllStructCreate($tagNMTOOLBAR, $lParam)      $hWndFrom = HWnd(DllStructGetData($tNMTOOLBAR, "hWndFrom"))      $IDFrom = (DllStructGetData($tNMTOOLBAR, "IDFrom")      $iCode = DllStructGetData($tNMTOOLBAR, "Code")      $iItem = DllStructGetData($tNMTOOLBAR, "iItem")      Switch $hWndFrom                Case $mainToolBar                        Switch $iCode                              Case $NM_LDOWN                                        Switch $iItem                                                Case $ToolBar_new                                                      $MSG_NOTIFY = "newuser"                                                Case $ToolBar_del                                                      $MSG_NOTIFY = "deluser"                                        EndSwitch                        EndSwitch                Case $hListView                        Switch $iCode ; 選擇產生的事件                              Case $NM_CLICK ; 左擊                              Case $NM_DBLCLK ; 雙擊                              Case $NM_RCLICK ; 右擊                        EndSwitch      EndSwitch      Return $GUI_RUNDEFMSGEndFunc   ;==>WM_NOTIFY

xyhqqaa 发表于 2018-8-13 15:29:20

tubaba 发表于 2018-8-13 14:57
为什么不仔细查看帮助呢?
Global Const $tagNMHDR = "struct; hwnd hWndFrom;uint_ptr IDFrom ...

谢谢 ,后面我搜索了其他。找到处理方法了。。。也万分感谢您~~~给您造成麻烦了~~~

xyhqqaa 发表于 2018-8-14 00:32:18


万分感谢楼上前辈。现在可以了~~

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        Local $tNMHDR, $iCode, $hWndFrom, $tNMTOOLBAR, $iItem
        Local $hListView = GUICtrlGetHandle($ListView)
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        $tNMTOOLBAR = DllStructCreate($tagNMTOOLBAR, $ilParam)
        $iItem = DllStructGetData($tNMTOOLBAR, "iItem")
        Switch $hWndFrom
                Case $hListView ;这里改成你的listview的ID
                        Switch $iCode
                                Case $NM_DBLCLK
                                        MsgBox("", "", "1")
                        EndSwitch

                Case $mainToolBar ;这个是你的toolbar的ID
                        Switch $iCode
                                Case $NM_LDOWN
                                        Switch $iItem
                                                Case $ToolBar_new
                                                        MsgBox(262208, "你点击了:", "2")
                                        EndSwitch
                        EndSwitch

        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY






redapple2008 发表于 2018-8-14 09:15:00

高级会员只能说使用时间较长,我也没会多少。只能解决自己能解决的问题

tubaba 发表于 2018-8-14 21:06:12

你还是没看仔细....$tagNMTOOLBAR结构已包含$tagNMHDR结构,所以无需创建二个结构
页: [1]
查看完整版本: 新手求教关于代码整合问题[已解决]