protected virtual bool HandleLButtonDown(ref Message m)
{
// We have to intercept this low level message rather than the more natural
// overridding of OnMouseDown, since ListCtrl's internal mouse down behavior
// is to select (or deselect) rows when the mouse is released. We don't
// want the selection to change when the user checks or unchecks a checkbox, so if the
// mouse down event was to check/uncheck, we have to hide this mouse
// down event from the control.
int x = m.LParam.ToInt32() & 0xFFFF;
int y = (m.LParam.ToInt32() >> 16) & 0xFFFF;
return this.ProcessLButtonDown(this.OlvHitTest(x, y));
}