Zedna, May be you can use something like this:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
Opt( "MustDeclareVars", 1 )
Global $hGui, $hLV, $aHit[2] = [ -1, -1 ] ; $aHit contains row & col of marked cell
MainFunc()
Func MainFunc()
$hGui = GUICreate( "Mark Cell in Listview", 250, 222 )
Local $idLV = GUICtrlCreateListView( "Column 0|Column 1|Column 2", 2, 2, 250-4, 222-4 )
$hLV = ControlGetHandle( $hGui, "", $idLV )
For $i = 0 To 49
GUICtrlCreateListViewItem( "Cell " & $i & ".0" & "|Cell " & $i & ".1" & "|Cell " & $i & ".2", $idLV )
Next
GUIRegisterMsg( $WM_NOTIFY, "WM_NOTIFY" )
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
EndFunc
Func WM_NOTIFY( $hWnd, $iMsg, $wParam, $lParam )
#forceref $hWnd, $iMsg, $wParam
Local $tNMHDR, $hWndFrom, $iCode
$tNMHDR = DllStructCreate( $tagNMHDR, $lParam )
$hWndFrom = HWnd( DllStructGetData( $tNMHDR, "hWndFrom" ) )
$iCode = DllStructGetData( $tNMHDR, "Code" )
Switch $hWndFrom
Case $hLV
Switch $iCode
Case $LVN_ITEMCHANGED
Local $tNMLISTVIEW, $iItem, $aInfo
$tNMLISTVIEW = DllStructCreate( $tagNMLISTVIEW, $lParam )
$iItem = DllStructGetData( $tNMLISTVIEW, "Item" )
_GUICtrlListView_SetItemSelected( $hLV, $iItem, False )
Local $aInfo = GUIGetCursorInfo( $hGui )
If $aInfo[2] Then
$aInfo = _GUICtrlListView_SubItemHitTest( $hLV, $aInfo[0]-2, $aInfo[1]-2 ) ; Upper left = ( 2, 2 )
If $aInfo[0] > -1 And $aInfo[1] > -1 And $aInfo[0] = $iItem Then
If $aHit[0] > -1 Then _
_GUICtrlListView_RedrawItems( $hLV, $aHit[0], $aHit[0] )
If $aHit[0] <> $aInfo[0] Or $aHit[1] <> $aInfo[1] Then
$aHit[0] = $aInfo[0] ; Row
$aHit[1] = $aInfo[1] ; Col
Else
$aHit[0] = -1 ; Row
$aHit[1] = -1 ; Col
EndIf
_GUICtrlListView_RedrawItems( $hLV, $iItem, $iItem )
EndIf
EndIf
Case $NM_CUSTOMDRAW
Local $tNMLVCUSTOMDRAW = DllStructCreate( $tagNMLVCUSTOMDRAW, $lParam )
Local $dwDrawStage = DllStructGetData( $tNMLVCUSTOMDRAW, "dwDrawStage" )
Switch $dwDrawStage ; Holds a value that specifies the drawing stage
Case $CDDS_PREPAINT ; Before the paint cycle begins
Return $CDRF_NOTIFYITEMDRAW ; Notify the parent window of any ITEM-related drawing operations
Case $CDDS_ITEMPREPAINT ; Before painting an item
Return $CDRF_NOTIFYSUBITEMDRAW ; Notify the parent window of any SUBITEM-related drawing operations
Case BitOR( $CDDS_ITEMPREPAINT, $CDDS_SUBITEM ) ; Before painting a subitem
Local $dwItemSpec = DllStructGetData( $tNMLVCUSTOMDRAW, "dwItemSpec" ) ; Item index
Local $iSubItem = DllStructGetData( $tNMLVCUSTOMDRAW, "iSubItem" ) ; Subitem index
Local $uItemState = DllStructGetData( $tNMLVCUSTOMDRAW, "uItemState" ) ; Item state
If $dwItemSpec = $aHit[0] Then ; Marked row
Switch $iSubItem
Case $aHit[1] ; Marked column
DllStructSetData( $tNMLVCUSTOMDRAW, "ClrText", 0xFFFFFF ) ; Forecolor white
DllStructSetData( $tNMLVCUSTOMDRAW, "clrTextBk", 0xCC6600 ) ; Backcolor dark blue, BGR
Case Else ; Other columns
DllStructSetData( $tNMLVCUSTOMDRAW, "ClrText", 0x000000 ) ; Forecolor black
DllStructSetData( $tNMLVCUSTOMDRAW, "ClrTextBk", 0xFFFFFF ) ; Backcolor white
EndSwitch
Else ; Other rows
DllStructSetData( $tNMLVCUSTOMDRAW, "ClrText", 0x000000 )
DllStructSetData( $tNMLVCUSTOMDRAW, "ClrTextBk", 0xFFFFFF )
EndIf
Return $CDRF_NEWFONT ; $CDRF_NEWFONT must be returned after changing font or colors
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc