Correction to header order maintenance when a dummy first item is
added and then deleted (as suggested by MSDN to handle the fact that
the first column of a listview is left justified).  Also removed
redundant casts.

diff --git a/dlls/comctl32/header.c b/dlls/comctl32/header.c
index 228f214..613938c 100644
--- a/dlls/comctl32/header.c
+++ b/dlls/comctl32/header.c
@@ -26,6 +26,7 @@
  *   - Drag and Drop support (including Notifications).
  *   - New messages.
  *   - Use notification format
+ *   - Correct the order maintenance code to preserve valid order
  *
  *  FIXME:
  *   - Little flaw when drawing a bitmap on the right side of the text.
@@ -93,7 +94,7 @@
 HEADER_IndexToOrder (HWND hwnd, INT iItem)
 {
     HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
-    HEADER_ITEM *lpItem = (HEADER_ITEM*)&infoPtr->items[iItem];
+    HEADER_ITEM *lpItem = &infoPtr->items[iItem];
     return lpItem->iOrder;
 }
 
@@ -608,10 +609,14 @@
     }
     else {
         HEADER_ITEM *oldItems = infoPtr->items;
+        HEADER_ITEM *pItem;
+        INT i;
+        INT iOrder;
         TRACE("Complex delete! [iItem=%d]\n", iItem);
 
         if (infoPtr->items[iItem].pszText)
             COMCTL32_Free (infoPtr->items[iItem].pszText);
+        iOrder = infoPtr->items[iItem].iOrder;
 
         infoPtr->uNumItem--;
         infoPtr->items = COMCTL32_Alloc (sizeof (HEADER_ITEM) * infoPtr->uNumItem);
@@ -627,6 +632,12 @@
                     (infoPtr->uNumItem - iItem) * sizeof(HEADER_ITEM));
         }
 
+        /* Correct the orders */
+        for (i=infoPtr->uNumItem, pItem = infoPtr->items; i; i--, pItem++)
+        {
+            if (pItem->iOrder > iOrder)
+            pItem->iOrder--;
+        }
         COMCTL32_Free (oldItems);
     }
 
@@ -665,7 +676,7 @@
     if (phdi->mask == 0)
 	return TRUE;
 
-    lpItem = (HEADER_ITEM*)&infoPtr->items[nItem];
+    lpItem = &infoPtr->items[nItem];
     if (phdi->mask & HDI_BITMAP)
 	phdi->hbm = lpItem->hbm;
 
@@ -718,7 +729,7 @@
     if (phdi->mask == 0)
 	return TRUE;
 
-    lpItem = (HEADER_ITEM*)&infoPtr->items[nItem];
+    lpItem = &infoPtr->items[nItem];
     if (phdi->mask & HDI_BITMAP)
 	phdi->hbm = lpItem->hbm;
 
@@ -805,7 +816,7 @@
       return FALSE;
     for (i=0; i<(int)wParam; i++)
       {
-	lpItem = (HEADER_ITEM*)&infoPtr->items[*order++];
+        lpItem = &infoPtr->items[*order++];
 	lpItem->iOrder=i;
       }
     infoPtr->bRectsValid=0;
@@ -881,7 +892,7 @@
         COMCTL32_Free (oldItems);
     }
 
-    lpItem = (HEADER_ITEM*)&infoPtr->items[nItem];
+    lpItem = &infoPtr->items[nItem];
     lpItem->bDown = FALSE;
 
     if (phdi->mask & HDI_WIDTH)
@@ -980,7 +991,7 @@
         COMCTL32_Free (oldItems);
     }
 
-    lpItem = (HEADER_ITEM*)&infoPtr->items[nItem];
+    lpItem = &infoPtr->items[nItem];
     lpItem->bDown = FALSE;
 
     if (phdi->mask & HDI_WIDTH)
@@ -1096,7 +1107,7 @@
 	if (HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGINGA, nItem, phdi->mask))
 	return FALSE;
 
-    lpItem = (HEADER_ITEM*)&infoPtr->items[nItem];
+    lpItem = &infoPtr->items[nItem];
     if (phdi->mask & HDI_BITMAP)
 	lpItem->hbm = phdi->hbm;
 
@@ -1163,7 +1174,7 @@
 	if (HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGINGW, nItem, phdi->mask))
 	return FALSE;
 
-    lpItem = (HEADER_ITEM*)&infoPtr->items[nItem];
+    lpItem = &infoPtr->items[nItem];
     if (phdi->mask & HDI_BITMAP)
 	lpItem->hbm = phdi->hbm;
 
@@ -1271,7 +1282,7 @@
     INT nItem;
 
     if (infoPtr->items) {
-	lpItem = (HEADER_ITEM*)infoPtr->items;
+        lpItem = infoPtr->items;
         for (nItem = 0; nItem < infoPtr->uNumItem; nItem++, lpItem++) {
 	    if ((lpItem->pszText) && (lpItem->pszText != LPSTR_TEXTCALLBACKW))
 		COMCTL32_Free (lpItem->pszText);
@@ -1403,10 +1414,10 @@
 
 	    TRACE("Exchanging [index:order] [%d:%d] [%d:%d]\n",
 		  infoPtr->iMoveItem,oldindex,nItem,newindex);
-	    lpItem= (HEADER_ITEM*)&infoPtr->items[nItem];
+            lpItem= &infoPtr->items[nItem];
 	    lpItem->iOrder=oldindex;
 
-	    lpItem= (HEADER_ITEM*)&infoPtr->items[infoPtr->iMoveItem];
+            lpItem= &infoPtr->items[infoPtr->iMoveItem];
 	    lpItem->iOrder = newindex;
 
 	    infoPtr->bRectsValid = FALSE;
@@ -1768,7 +1779,7 @@
             return HEADER_SetFont (hwnd, wParam, lParam);
 
         default:
-            if (msg >= WM_USER)
+            if ((msg >= WM_USER) && (msg < WM_APP))
 		ERR("unknown msg %04x wp=%04x lp=%08lx\n",
 		     msg, wParam, lParam );
 	    return DefWindowProcA (hwnd, msg, wParam, lParam);
@@ -1799,4 +1810,3 @@
 {
     UnregisterClassA (WC_HEADERA, (HINSTANCE)NULL);
 }
-