Jump to content

Nirsoft


trids
 Share

Recommended Posts

Are you joking? I know where I am! But still the posts goes forgot too quickly! A standard page could keep a good list a lot better.

Edit: EHI! I overtook 400 posts, is it true that I may change my status (I really HATE "Mass spammer"?

Edited by ezzetabi
Link to comment
Share on other sites

Interesting. I don't know if it was written, but I found this code about handling ListView Control, here:

UINT GetLVItemState(HWND hwnd, int i, UINT mask)
{
    return ListView_GetItemState(hwnd, i, mask);
}

void GetLVItemText(HWND hwnd, int iItem, int iSubItem, LPSTR pszText, int cchTextMax)
{
    ListView_GetItemText(hwnd, iItem, iSubItem, pszText, cchTextMax);
}

void SetLVItemText(HWND hwnd, int i, int iSubItem, LPSTR pszText)
{
    ListView_SetItemText(hwnd, i, iSubItem, pszText);
}


BOOL GetLVItem(HWND hListView, UINT mask, int iItem, int iSubItem, LPLVITEM pitem, UINT stateMask)
{
    pitem->mask = mask;
    pitem->stateMask = stateMask;
    pitem->iItem = iItem;
    pitem->iSubItem = iSubItem;
    return ListView_GetItem(hListView, pitem);
}


int GetHeaderItemCount(HWND hwndHD)
{
    return Header_GetItemCount(hwndHD);
}

HWND GetLVHeaderControl(HWND hListView)
{
    return ListView_GetHeader(hListView);
}

int GetLVColumnsCount(HWND hListView)
{
    return (GetHeaderItemCount(GetLVHeaderControl(hListView)));
}


void SwapLVItems(HWND hListView, int iItem1, int iItem2)
{
    //I assume that 4K buffer is really enough for storing the content of a column
    const LOCAL_BUFFER_SIZE = 4096;
    LVITEM lvi1, lvi2;
    UINT uMask = LVIF_TEXT | LVIF_IMAGE | LVIF_INDENT | LVIF_PARAM  | LVIF_STATE;
    char szBuffer1[LOCAL_BUFFER_SIZE + 1], szBuffer2[LOCAL_BUFFER_SIZE + 1];
    lvi1.pszText = szBuffer1;
    lvi2.pszText = szBuffer2;
    lvi1.cchTextMax  = sizeof(szBuffer1);
    lvi2.cchTextMax  = sizeof(szBuffer2);

    BOOL bResult1 = GetLVItem(hListView, uMask, iItem1, 0, &lvi1, (UINT)-1);
    BOOL bResult2 = GetLVItem(hListView, uMask, iItem2, 0, &lvi2, (UINT)-1);

    if (bResult1 && bResult2)
    {
  lvi1.iItem = iItem2;
  lvi2.iItem = iItem1;
  lvi1.mask = uMask;
  lvi2.mask = uMask;
  lvi1.stateMask = (UINT)-1;
  lvi2.stateMask = (UINT)-1;
  //swap the items
  ListView_SetItem(hListView, &lvi1);
  ListView_SetItem(hListView, &lvi2);

  int iColCount = GetLVColumnsCount(hListView);
  //Loop for swapping each column in the items.
  for (int iIndex = 1; iIndex < iColCount; iIndex++)
  {
     szBuffer1[0] = '\0';
     szBuffer2[0] = '\0';
     GetLVItemText(hListView, iItem1, iIndex, szBuffer1, LOCAL_BUFFER_SIZE);
     GetLVItemText(hListView, iItem2, iIndex, szBuffer2, LOCAL_BUFFER_SIZE);
     SetLVItemText(hListView, iItem2, iIndex, szBuffer1);
     SetLVItemText(hListView, iItem1, iIndex, szBuffer2);
  }
    }
}

//Move up the selected items
void MoveLVSelectedItemsUp(HWND hListView)
{
    int iCount = ListView_GetItemCount(hListView);

    for (int iIndex = 1; iIndex < iCount; iIndex++)
  if (GetLVItemState(hListView, iIndex, LVIS_SELECTED) != 0)
     SwapLVItems(hListView, iIndex, iIndex - 1);

}

//Move down the selected items
void MoveLVSelectedItemsDown(HWND hListView)
{
    int iCount = ListView_GetItemCount(hListView);

    for (int iIndex = iCount - 1; iIndex >= 0; iIndex--)
  if (GetLVItemState(hListView, iIndex, LVIS_SELECTED) != 0)
     SwapLVItems(hListView, iIndex, iIndex + 1);

}
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...