Beim Rumexperimentieren mit meinem ListBox-Control hat mich gestört, dass bei einem Rechtsklick (welcher das Kontextmenü aufruft) das Item nicht ausgewählt wird (anders als beim ListView), und deswegen habe ich mir etwas zusammengebastelt. Bei ListView hatte ich mit NM_RCLICK mit WM_NOTIFY gearbeitet, aber das wird von einer ListBox nicht gesendet. Hier der relevante Auszug:
Spoiler anzeigen
#include <WinAPI.au3>
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListBox.au3>
$hGUI_Main = GUICreate("TestGUI", 300, 400)
$hList_Downloads = GUICtrlCreateList("list1", 10, 20, 280, 360)
GUICtrlSetData(-1, "list2|list3|list4")
GUIRegisterMsg($WM_RBUTTONDOWN, "WM_RBUTTONDOWN")
GUISetState()
Do
Until GUIGetMsg() = -3
Func WM_RBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $cx = _WinAPI_LoWord($lParam), $cy = _WinAPI_HiWord($lParam);, $aiWinPos = WinGetPos($hGUI_Main)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $cx = ' & $cx & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$iIndex = _GUICtrlListBox_ItemFromPoint($hList_Downloads, $cx, $cy);$cx - $aiWinPos[0], $cy - $aiWinPos[1])
If $iIndex <> -1 Then _GUICtrlListBox_SetCurSel($hList_Downloads, $iIndex)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_RBUTTONDOWN
Wie man am Debug sehen kann, wird die Funktion (zumindest bei mir) extrem selten ausgeführt, alle 10 Klicks, und liefert manchmal einen völlig schwachsinnigen Wert zurück (teilweise 1800, was auf der der "totalen" Mausposition entspräche, auf der rechten Seite, obwohl die Position relativ zum Client sein soll). Ähnliche Ergebnisse bei WM_RBUTTONDOWN und WM_RBUTTONCLICK sowie WM_NCRBUTTONUP und WM_NCRBUTTONDOWN, welche allerdings zuverlässig ausgeführt werden, wenn man auf den X-Button drück (Rechtsklick natürlich). Ich kann mir ehrlich gesagt nicht erklären, wie es dazu kommt. Link zur MSDN.