Two fixes for wxListCtrl under XP.

1) Do not use lParam for LVN_HOTTRACK since this doesn't
have valid data.
2) Check for item validity in HDN_GETDISPINFOW notification and
return TRUE to stop further processing of this strange message.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17592 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2002-10-21 12:41:52 +00:00
parent 8a8578cebb
commit 4b2452426b

View File

@@ -1655,6 +1655,10 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
// work around is to simply catch both versions and hope that it
// works (why should this message exist in ANSI and Unicode is
// beyond me as it doesn't deal with strings at all...)
// Tip from www.deja.com: can use CCM_SETUNICODE to set
// Unicode or ANSI mode. We might consider doing that for
// consistency in ANSI mode.
case HDN_BEGINTRACKA:
case HDN_BEGINTRACKW:
eventType = wxEVT_COMMAND_LIST_COL_BEGIN_DRAG;
@@ -1713,7 +1717,65 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
}
}
break;
#if 0
case HDN_ITEMCHANGINGW:
{
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
case HDN_ITEMCHANGEDA:
{
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
case HDN_ITEMCHANGEDW:
{
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
case HDN_ITEMCLICKA:
{
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
case HDN_ITEMCLICKW:
{
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
case HDN_ITEMDBLCLICKA:
{
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
case HDN_ITEMDBLCLICKW:
{
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
case HDN_DIVIDERDBLCLICKA:
{
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
case HDN_DIVIDERDBLCLICKW:
{
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
case HDN_GETDISPINFOA:
{
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
#endif
case HDN_GETDISPINFOW:
{
LPNMHDDISPINFOW info = (LPNMHDDISPINFOW) lParam;
// This is a fix for a strange bug under XP.
// Normally, info->iItem is a valid index, but
// sometimes this is a silly (large) number
// and when we return FALSE via wxControl::MSWOnNotify
// to indicate that it hasn't yet been processed,
// there's a GPF in Windows.
// By returning TRUE here, we avoid further processing
// of this strange message.
if (info->iItem > GetColumnCount())
return TRUE;
else
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
default:
return wxControl::MSWOnNotify(idCtrl, lParam, result);
}
@@ -1735,7 +1797,9 @@ bool wxListCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result)
case LVN_BEGINRDRAG:
case LVN_COLUMNCLICK:
#ifdef LVN_HOTTRACK
case LVN_HOTTRACK:
// Under XP, this does _not_ give us a valid lParam,
// so we get a crash.
// case LVN_HOTTRACK:
#endif
case LVN_ITEMCHANGED:
case LVN_ITEMCHANGING: