Jump to content

(solved)2x WM_NOTIFY


Recommended Posts

I can't... I have made listview and wm_notify is responsible for:

1). all functions edit and colors and dbclick, nmclick etc

2). click on listview scroll bar, I mean $LVN_BEGINSCROLL and $LVN_ENDSCROLL

The point is that function $LVN_BEGINSCROLL has to turn off wm_notify, I mean sub-clause 1) but also $LVN_ENDSCROLL is turning off and $LVN_ENDSCROLL has to turn on wm_notify

Link to comment
Share on other sites

One message, one function. Add a global variable to handle the switch within the function... something like this:

Global $bWM_NOTIFY = True
GUIRegisterMsg($WM_NOTIFY, "MY_WM_NOTIFY")

While 1
    Sleep(10)
WEnd


Func MY_WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)

    Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    Local $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    Local $iCode = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case $hYourListview
            Switch $iCode
                Case $LVN_BEGINSCROLL
                    $bWM_NOTIFY = False
                Case $LVN_ENDSCROLL
                    $bWM_NOTIFY = True
            EndSwitch
    EndSwitch

    If $bWM_NOTIFY Then
        ; handle notifications of other controls
    EndIf

    Return $GUI_RUNDEFMSG

EndFunc   ;==>MY_WM_NOTIFY
Link to comment
Share on other sites

I can not understand how it works, how to attach it to my WM_NOTIFY. If you know please help:

;===============================================================================
Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    
    

    Global $iLastItem = -1, $iLastsubitemNR = -1
    Global $hGUI_Multiline, $View_Multiline, $ColName ; Multiline cell viewer window
    
    
    Local $tagNMHDR, $pressed,$event, $retval = $GUI_RUNDEFMSG ;, $idFrom
    $tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code)
    If @error Then
        $tagNMHDR =0
        Return
    EndIf
;~  $from = DllStructGetData($tagNMHDR, 1)
;~  $idFrom = DllStructGetData($tagNMHDR,2)
    ;ConsoleWrite("idFrom="&$idFrom&@LF)
    $event = DllStructGetData($tagNMHDR, 3)
    Select
        Case ($event = $HDN_TRACK or $event = $HDN_TRACKW)
            ;column dragging
            _CancelEdit()
        Case $MsgID = $WM_MOVING
            _MoveControl()
        Case $wParam = $__LISTVIEWCTRL
            Select
                
            
                
                
                
                Case $event = $LVN_ITEMCHANGED
                Local $ckcount = _LvGetCheckedCount($__LISTVIEWCTRL)
                    If $LVCHECKEDCNT <> $ckcount Then
                        $LVCHECKEDCNT = $ckcount
                        $bLVITEMCHECKED = True
                        _CancelEdit()
                        
                    EndIf

                    
                
                    
                Case $event = $NM_CLICK
                    If $bLVEDITondblclick = True Then
                        _LVGetInfo($lParam)
                        ;scroll column into view.
                        Switch $LVINFO[1]
                        Case 0
                            _GUICtrlListView_Scroll ( $__LISTVIEWCTRL, -$LVINFO[4], 0 )
                            _FillLV_Info($__LISTVIEWCTRL, $LVINFO[8], $LVINFO[9], $LVINFO,0)
                            ;_LVGetInfo($lParam)
                        Case Else
                            Local $ctrlSize = ControlGetPos("","",$__LISTVIEWCTRL)
                            If $LVINFO[2]+$LVINFO[4] > $ctrlSize[2] Then
                            _GUICtrlListView_Scroll ( $__LISTVIEWCTRL, $LVINFO[4], 0 )
                            _FillLV_Info($__LISTVIEWCTRL, $LVINFO[8], $LVINFO[9], $LVINFO,0)
                            EndIf
                        EndSwitch
                        if Not $bLVITEMCHECKED Then 
                            _ListView_Click()
                        EndIf
                    Else
                        if $editFlag = 1 Then _CancelEdit()
                    EndIf
                    
                    
                    
                    $Column_attribute =_GUICtrlListView_GetColumn($ListView, $LVINFO[9])
                    ; if no cell change return without doing anything
                    If $iLastItem = $LVINFO[8] And $iLastsubitemNR = $LVINFO[9] Then Return 0
                    $iLastItem = $LVINFO[8]
                    $iLastsubitemNR = $LVINFO[9]
                    
                    Local $sToolTipData = _GUICtrlListView_GetItemText($ListView, $LVINFO[8],$LVINFO[9])
                    $Mypos = StringInStr ( $sToolTipData, @CRLF )
                
                    $strin=_GUICtrlListView_GetStringWidth($listview, $sToolTipData)
                    $strin = $strin + 12
                    $str =_GUICtrlListView_getColumnWidth($listview, $LVINFO[9])
                    
                    
                    If $Mypos = 0 Then 
                        if $str < $strin then
                        
                            ToolTip($sToolTipData, MouseGetPos(0) + 15, MouseGetPos(1) + 15,"",0,1)                     
                        Else
                        ToolTip("")
                        EndIf
                    
                        ;ConsoleWrite("R" & $iItem & "C" & $subitemNR & " No tip" & @CR)
                    Else    
                        ToolTip("")
                    EndIf
                    
                    
                    
                
                
                
                
                
                
                
                
                
                









                $bLVITEMCHECKED = False;
                Case $event = $NM_DBLCLK
                   
                    _LVGetInfo($lParam)
                    _ListView_DoubleClick()
                Case $event = $NM_RCLICK
                    _LVGetInfo($lParam)
                    _ListView_RClick()
                Case $event = -180
                    
                    If $editFlag = 1 Then
                        Send("{Esc}")
                        _CancelEdit()
                        $retval = 0
                    EndIf
                Case $event = -181
                    
                    _FillLV_Info($__LISTVIEWCTRL, $LVINFO[0], $LVINFO[1], $LVINFO,0)
                Case $event= -121
                    
                    _LVGetInfo($lParam,1)
                Case Else
                    
            EndSelect
        Case $lvDate
            Select
                Case $event = $DTN_DROPDOWN
                    $bCanceled = False
                    $bDATECHANGED = False
                Case $event = $DTN_WMKEYDOWNA
                    $pressed = _vKeyCheck()
                    If $pressed = 27 Then _CancelEdit()
                Case $event = $DTN_DATETIMECHANGE
                                    
                    If $bDATECHANGED = False Then $bDATECHANGED = True
                    $pressed = _vKeyCheck()
                    if $pressed = 27 Then
                        _CancelEdit()
                        $bDATECHANGED = False
                    EndIf
                Case $event = $DTN_CLOSEUP
                            
                    if $bCanceled or ($bDATECHANGED = False) Then 
                        Send("{Esc}")
                        $bDATECHANGED = False
                    Else
;                       If $bLVUPDATEonfocusCHANGE = True Then
                            Send("{Enter}")
                            $bDATECHANGED = True
;                       Else
;                           Send("{Esc}")
;                       EndIf
                    EndIf
                case $event = -7
                    
                    $bCanceled = False
                    $bDATECHANGED = False
                
                    if $bCanceled = True Then
                        ;or ($bDATECHANGED = False) Then 
                        Send("{Esc}")
                        $bDATECHANGED = False
                        $bCanceled = False
                    Else
                        $bDATECHANGED = True
                    EndIf
            EndSelect
        Case $event = -326
            
            if $editFlag Then _CancelEdit()
        Case $MsgID = $WM_KEYDOWN
            ;----------------------------------------------------------------------------------------------
            
            ;----------------------------------------------------------------------------------------------
        Case Else
            
                    ;;uncomment the following line to have the edit _LVUpdate if the mouse moves
            ;;off of the listview.
            If $editFlag And Not(_HasFocus($editCtrl)) Then _LVUpdate($editCtrl, $__LISTVIEWCTRL, $LVINFO[0], $LVINFO[1])
    EndSelect
    
    
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    Return $retval
EndFunc   ;==>WM_Notify_Events
Link to comment
Share on other sites

Hard to test with only a snippet of code :mellow:, give this a try:

Global $bWM_NOTIFY = True

;===============================================================================
Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam

    Global $iLastItem = -1, $iLastsubitemNR = -1
    Global $hGUI_Multiline, $View_Multiline, $ColName ; Multiline cell viewer window

    Local $tagNMHDR, $pressed, $event, $retval = $GUI_RUNDEFMSG ;, $idFrom
    $tagNMHDR = DllStructCreate("int;int;int", $lParam);NMHDR (hwndFrom, idFrom, code)
    If @error Then
        $tagNMHDR = 0
        Return
    EndIf
;~  $from = DllStructGetData($tagNMHDR, 1)
;~  $idFrom = DllStructGetData($tagNMHDR,2)
    ;ConsoleWrite("idFrom="&$idFrom&@LF)
    $event = DllStructGetData($tagNMHDR, 3)

    Select
        Case $wParam = $__LISTVIEWCTRL
            Select
                Case $event = $LVN_BEGINSCROLL
                    $bWM_NOTIFY = False
                Case $event = $LVN_ENDSCROLL
                    $bWM_NOTIFY = True
            EndSelect
    EndSelect

    If $bWM_NOTIFY Then
        Select
            Case $wParam = $__LISTVIEWCTRL
                Select
                    Case $event = $LVN_ITEMCHANGED
                        Local $ckcount = _LvGetCheckedCount($__LISTVIEWCTRL)
                        If $LVCHECKEDCNT <> $ckcount Then
                            $LVCHECKEDCNT = $ckcount
                            $bLVITEMCHECKED = True
                            _CancelEdit()
                        EndIf
                    Case $event = $NM_CLICK
                        If $bLVEDITondblclick = True Then
                            _LVGetInfo($lParam)
                            ;scroll column into view.
                            Switch $LVINFO[1]
                                Case 0
                                    _GUICtrlListView_Scroll($__LISTVIEWCTRL, -$LVINFO[4], 0)
                                    _FillLV_Info($__LISTVIEWCTRL, $LVINFO[8], $LVINFO[9], $LVINFO, 0)
                                    ;_LVGetInfo($lParam)
                                Case Else
                                    Local $ctrlSize = ControlGetPos("", "", $__LISTVIEWCTRL)
                                    If $LVINFO[2] + $LVINFO[4] > $ctrlSize[2] Then
                                        _GUICtrlListView_Scroll($__LISTVIEWCTRL, $LVINFO[4], 0)
                                        _FillLV_Info($__LISTVIEWCTRL, $LVINFO[8], $LVINFO[9], $LVINFO, 0)
                                    EndIf
                            EndSwitch
                            If Not $bLVITEMCHECKED Then
                                _ListView_Click()
                            EndIf
                        Else
                            If $editFlag = 1 Then _CancelEdit()
                        EndIf

                        $Column_attribute = _GUICtrlListView_GetColumn($ListView, $LVINFO[9])
                        ; if no cell change return without doing anything
                        If $iLastItem = $LVINFO[8] And $iLastsubitemNR = $LVINFO[9] Then Return 0
                        $iLastItem = $LVINFO[8]
                        $iLastsubitemNR = $LVINFO[9]

                        Local $sToolTipData = _GUICtrlListView_GetItemText($ListView, $LVINFO[8], $LVINFO[9])
                        $Mypos = StringInStr($sToolTipData, @CRLF)

                        $strin = _GUICtrlListView_GetStringWidth($ListView, $sToolTipData)
                        $strin = $strin + 12
                        $str = _GUICtrlListView_GetColumnWidth($ListView, $LVINFO[9])

                        If $Mypos = 0 Then
                            If $str < $strin Then

                                ToolTip($sToolTipData, MouseGetPos(0) + 15, MouseGetPos(1) + 15, "", 0, 1)
                            Else
                                ToolTip("")
                            EndIf

                            ;ConsoleWrite("R" & $iItem & "C" & $subitemNR & " No tip" & @CR)
                        Else
                            ToolTip("")
                        EndIf

                        $bLVITEMCHECKED = False;
                    Case $event = $NM_DBLCLK

                        _LVGetInfo($lParam)
                        _ListView_DoubleClick()
                    Case $event = $NM_RCLICK
                        _LVGetInfo($lParam)
                        _ListView_RClick()
                    Case $event = -180

                        If $editFlag = 1 Then
                            Send("{Esc}")
                            _CancelEdit()
                            $retval = 0
                        EndIf
                    Case $event = -181

                        _FillLV_Info($__LISTVIEWCTRL, $LVINFO[0], $LVINFO[1], $LVINFO, 0)
                    Case $event = -121

                        _LVGetInfo($lParam, 1)
                    Case Else

                    Case ($event = $HDN_TRACK Or $event = $HDN_TRACKW)
                        ;column dragging
                        _CancelEdit()
                    Case $MsgID = $WM_MOVING
                        _MoveControl()

                EndSelect

            Case $lvDate
                Select
                    Case $event = $DTN_DROPDOWN
                        $bCanceled = False
                        $bDATECHANGED = False
                    Case $event = $DTN_WMKEYDOWNA
                        $pressed = _vKeyCheck()
                        If $pressed = 27 Then _CancelEdit()
                    Case $event = $DTN_DATETIMECHANGE

                        If $bDATECHANGED = False Then $bDATECHANGED = True
                        $pressed = _vKeyCheck()
                        If $pressed = 27 Then
                            _CancelEdit()
                            $bDATECHANGED = False
                        EndIf
                    Case $event = $DTN_CLOSEUP

                        If $bCanceled or ($bDATECHANGED = False) Then
                            Send("{Esc}")
                            $bDATECHANGED = False
                        Else
                            ;                       If $bLVUPDATEonfocusCHANGE = True Then
                            Send("{Enter}")
                            $bDATECHANGED = True
                            ;                       Else
                            ;                           Send("{Esc}")
                            ;                       EndIf
                        EndIf
                    Case $event = -7

                        $bCanceled = False
                        $bDATECHANGED = False

                        If $bCanceled = True Then
                            ;or ($bDATECHANGED = False) Then
                            Send("{Esc}")
                            $bDATECHANGED = False
                            $bCanceled = False
                        Else
                            $bDATECHANGED = True
                        EndIf
                EndSelect
            Case $event = -326

                If $editFlag Then _CancelEdit()
            Case $MsgID = $WM_KEYDOWN
                ;----------------------------------------------------------------------------------------------

                ;----------------------------------------------------------------------------------------------
            Case Else
                ;;uncomment the following line to have the edit _LVUpdate if the mouse moves
                ;;off of the listview.
                If $editFlag And Not (_HasFocus($editCtrl)) Then _LVUpdate($editCtrl, $__LISTVIEWCTRL, $LVINFO[0], $LVINFO[1])
        EndSelect
    EndIf

    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    Return $retval
EndFunc   ;==>WM_Notify_Events
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...