I can hardly imagine an ArrayCtrl where you are interested in left clicks but not the position of them. At least you would be interested in the clicked row index, but adding column index too could not hurt. Since the clicked row is not always available through GetCursor (clicks below last row), would I need to subclass ArrayCtrl just to do exactly the thing that WhenLeftClick callback is for? How about adding a GetClickPosition() public method, which the WhenLeftClick can call?
I believe there is only a little difference between this and my original "WhenLeftClickNoItem" suggestion - as long as your are not interested in "non-existing" (past the last row) rows (which I believe you should not be).
I mean - WhenLeftClickNoItem -> indicates click outside
WhenLeftClick -> indicates click inside, use GetCursor to get row, GetClickColumn to get column.
Mirek
P.S.: would it be based on my actual experience, I would remove almost all ArrayCtrl callbacks except of WhenCursor, WhenLeftDouble (maybe add WhenLeftDoubleNoItem) and WhenBar. I have not used others for years....