// This method returns the count of either columns or rows // in the Grid. static private int GetCountOfItemsInDimension(IntPtr hwnd, int groupID, IsNewItemInDimension comparer) { // Algorithm: // Get the rect of the item. // Compare it using provided "comparer" with the previously obtained rect of the previous item in the grid // if comparer returns New increase the count int itemsCount = 0; GroupManager.GroupInfo groupInfo = GetGroupInfo(hwnd, groupID); if (groupInfo) { int [] items = groupInfo._items; NativeMethods.Win32Rect rc; NativeMethods.Win32Rect rcNext; // get coordinates of the first item in the grid if (WindowsListView.GetItemRect(hwnd, items[0], NativeMethods.LVIR_BOUNDS, out rc)) { NewItemInDimension result = NewItemInDimension.New; itemsCount++; // at least one exist for (int i = 1; result != NewItemInDimension.Stop && i < groupInfo._count; i++) { if (!WindowsListView.GetItemRect(hwnd, items[i], NativeMethods.LVIR_BOUNDS, out rcNext)) { // Fail to get rc, makes no sense to continue System.Diagnostics.Debug.Assert(false, "GetCountOfItemsInDimension: failed to get item rect"); return(0); } result = comparer(rc, rcNext); if (result == NewItemInDimension.New) { // found a change in the rect // we either have a new column or new raw itemsCount++; // update the rc with the new coordinates rc = rcNext; } } } return(itemsCount); } return(-1); }
// This method returns the count of either columns or rows // in the Grid. static private int GetCountOfItemsInDimension (IntPtr hwnd, int groupID, IsNewItemInDimension comparer) { // Algorithm: // Get the rect of the item. // Compare it using provided "comparer" with the previously obtained rect of the previous item in the grid // if comparer returns New increase the count int itemsCount = 0; GroupManager.GroupInfo groupInfo = GetGroupInfo (hwnd, groupID); if (groupInfo) { int [] items = groupInfo._items; NativeMethods.Win32Rect rc; NativeMethods.Win32Rect rcNext; // get coordinates of the first item in the grid if (WindowsListView.GetItemRect(hwnd, items[0], NativeMethods.LVIR_BOUNDS, out rc)) { NewItemInDimension result = NewItemInDimension.New; itemsCount++; // at least one exist for (int i = 1; result != NewItemInDimension.Stop && i < groupInfo._count; i++) { if (!WindowsListView.GetItemRect(hwnd, items[i], NativeMethods.LVIR_BOUNDS, out rcNext)) { // Fail to get rc, makes no sense to continue System.Diagnostics.Debug.Assert (false, "GetCountOfItemsInDimension: failed to get item rect"); return 0; } result = comparer (rc, rcNext); if (result == NewItemInDimension.New) { // found a change in the rect // we either have a new column or new raw itemsCount++; // update the rc with the new coordinates rc = rcNext; } } } return itemsCount; } return -1; }