I've tried several approaches, but none of them seem to work...
Here's my latest code for this.. Someone please help!

From my windowproc's WM_NOTIFY:
Code:
		case LVN_COLUMNCLICK:			
			// Keep track of sort order and column used for sorting.
			static int nSortColumn = -1;
			static BOOL bSortAscending = TRUE;
			LVITEM lvi;

			// Reverse sort order if column was just previously clicked.
			if(((NM_LISTVIEW*)lParam)->iSubItem == nSortColumn)
				bSortAscending = !bSortAscending;
			else{
				bSortAscending = TRUE; 
				nSortColumn = ((NM_LISTVIEW*)lParam)->iSubItem;
			}
			// Set item data for each row to column value,
			// since sort routine gets passed item data only.
			for(int item=0; item<ListView_GetItemCount(GetDlgItem(hwThis, LIST1)); item++){
				ListView_GetItem(GetDlgItem(hwThis, LIST1), &lvi);
				int value = GetLstItemLong(GetDlgItem(hwThis, LIST1), item, ((NM_LISTVIEW*)lParam)->iSubItem);  // numeric sort
				if(!bSortAscending) { value = -value; }
				lvi.lParam = (long)&value;
				ListView_SetItem(GetDlgItem(hwThis, LIST1), &lvi);
			}
			LPARAM lParamSort = 0;
			ListView_SortItems(GetDlgItem(hwThis, LIST1), CompareFunc, lParamSort);
			break;
My integer sort function. Both lParam1 & 2 are 0 when i click a columnheader...What's happening here??
Code:
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort){
  // First two parameters are item data to be compared.
  // Third parameter is passed from SortItems, not used here.
  if (lParam1 < lParam2) {return -1;}
  if (lParam1 > lParam2) {return  1;}
  return  0;
}