GetItemA/W on header controls should handle message even if index is

invalid.
This commit is contained in:
Evan Deaubl 2005-01-10 14:25:30 +00:00 committed by Alexandre Julliard
parent a3026ca8f9
commit c84832160c
1 changed files with 34 additions and 20 deletions

View File

@ -688,29 +688,36 @@ HEADER_GetItemA (HWND hwnd, WPARAM wParam, LPARAM lParam)
if (!phdi) if (!phdi)
return FALSE; return FALSE;
if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem))
return FALSE;
TRACE("[nItem=%d]\n", nItem); TRACE("[nItem=%d]\n", nItem);
if (phdi->mask == 0) if (phdi->mask == 0)
return TRUE; return TRUE;
if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) {
lpItem = NULL;
}
else {
lpItem = &infoPtr->items[nItem]; lpItem = &infoPtr->items[nItem];
}
if (phdi->mask & HDI_BITMAP) if (phdi->mask & HDI_BITMAP)
phdi->hbm = lpItem->hbm; phdi->hbm = (lpItem != NULL) ? lpItem->hbm : 0;
if (phdi->mask & HDI_FORMAT) if (phdi->mask & HDI_FORMAT)
phdi->fmt = lpItem->fmt; phdi->fmt = (lpItem != NULL) ? lpItem->fmt : 0;
if (phdi->mask & HDI_WIDTH) if (phdi->mask & HDI_WIDTH)
phdi->cxy = lpItem->cxy; phdi->cxy = (lpItem != NULL) ? lpItem->cxy : 0;
if (phdi->mask & HDI_LPARAM) if (phdi->mask & HDI_LPARAM)
phdi->lParam = lpItem->lParam; phdi->lParam = (lpItem != NULL) ? lpItem->lParam : 0;
if (phdi->mask & HDI_TEXT) { if (phdi->mask & HDI_TEXT) {
if (lpItem->pszText != LPSTR_TEXTCALLBACKW) { if (lpItem == NULL) {
*phdi->pszText = 0;
}
else if (lpItem->pszText != LPSTR_TEXTCALLBACKW) {
if (lpItem->pszText) if (lpItem->pszText)
WideCharToMultiByte (CP_ACP, 0, lpItem->pszText, -1, WideCharToMultiByte (CP_ACP, 0, lpItem->pszText, -1,
phdi->pszText, phdi->cchTextMax, NULL, NULL); phdi->pszText, phdi->cchTextMax, NULL, NULL);
@ -722,10 +729,10 @@ HEADER_GetItemA (HWND hwnd, WPARAM wParam, LPARAM lParam)
} }
if (phdi->mask & HDI_IMAGE) if (phdi->mask & HDI_IMAGE)
phdi->iImage = lpItem->iImage; phdi->iImage = (lpItem != NULL) ? lpItem->iImage : 0;
if (phdi->mask & HDI_ORDER) if (phdi->mask & HDI_ORDER)
phdi->iOrder = lpItem->iOrder; phdi->iOrder = (lpItem != NULL) ? lpItem->iOrder : 0;
return TRUE; return TRUE;
} }
@ -741,29 +748,36 @@ HEADER_GetItemW (HWND hwnd, WPARAM wParam, LPARAM lParam)
if (!phdi) if (!phdi)
return FALSE; return FALSE;
if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem))
return FALSE;
TRACE("[nItem=%d]\n", nItem); TRACE("[nItem=%d]\n", nItem);
if (phdi->mask == 0) if (phdi->mask == 0)
return TRUE; return TRUE;
if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) {
lpItem = NULL;
}
else {
lpItem = &infoPtr->items[nItem]; lpItem = &infoPtr->items[nItem];
}
if (phdi->mask & HDI_BITMAP) if (phdi->mask & HDI_BITMAP)
phdi->hbm = lpItem->hbm; phdi->hbm = (lpItem != NULL) ? lpItem->hbm : 0;
if (phdi->mask & HDI_FORMAT) if (phdi->mask & HDI_FORMAT)
phdi->fmt = lpItem->fmt; phdi->fmt = (lpItem != NULL) ? lpItem->fmt : 0;
if (phdi->mask & HDI_WIDTH) if (phdi->mask & HDI_WIDTH)
phdi->cxy = lpItem->cxy; phdi->cxy = (lpItem != NULL) ? lpItem->cxy : 0;
if (phdi->mask & HDI_LPARAM) if (phdi->mask & HDI_LPARAM)
phdi->lParam = lpItem->lParam; phdi->lParam = (lpItem != NULL) ? lpItem->lParam : 0;
if (phdi->mask & HDI_TEXT) { if (phdi->mask & HDI_TEXT) {
if (lpItem->pszText != LPSTR_TEXTCALLBACKW) { if (lpItem == NULL) {
*phdi->pszText = 0;
}
else if (lpItem->pszText != LPSTR_TEXTCALLBACKW) {
if (lpItem->pszText) if (lpItem->pszText)
lstrcpynW (phdi->pszText, lpItem->pszText, phdi->cchTextMax); lstrcpynW (phdi->pszText, lpItem->pszText, phdi->cchTextMax);
else else
@ -774,10 +788,10 @@ HEADER_GetItemW (HWND hwnd, WPARAM wParam, LPARAM lParam)
} }
if (phdi->mask & HDI_IMAGE) if (phdi->mask & HDI_IMAGE)
phdi->iImage = lpItem->iImage; phdi->iImage = (lpItem != NULL) ? lpItem->iImage : 0;
if (phdi->mask & HDI_ORDER) if (phdi->mask & HDI_ORDER)
phdi->iOrder = lpItem->iOrder; phdi->iOrder = (lpItem != NULL) ? lpItem->iOrder : 0;
return TRUE; return TRUE;
} }