⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mylist.cpp

📁 ACCESS数据库+MFC编写的学生数据库管理系统
💻 CPP
字号:
// MyList.cpp : implementation file
//

#include "stdafx.h"
#include "MyList.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMyList

CMyList::CMyList()
{
 nSortedCol = -1;
    bSortAscending = TRUE; 
}

CMyList::~CMyList()
{
}


BEGIN_MESSAGE_MAP(CMyList, CListCtrl)
 //{{AFX_MSG_MAP(CMyList)
 ON_NOTIFY(HDN_ITEMCLICKA, 0, OnHeaderClicked)
    ON_NOTIFY(HDN_ITEMCLICKW, 0, OnHeaderClicked)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMyList message handlers


void CMyList::OnHeaderClicked(NMHDR* pNMHDR, LRESULT* pResult)
{
	return;
 /*  	HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
	

     if( phdn->iButton == 0 )
        {
                // User clicked on header using left mouse button
                if( phdn->iItem == nSortedCol )
                        bSortAscending = !bSortAscending;
                else
                        bSortAscending = TRUE;

                nSortedCol = phdn->iItem;
                SortTextItems( nSortedCol, bSortAscending );

        }
*/
        *pResult = 0;
}

BOOL CMyList::SortTextItems(int nCol, BOOL bAscending, int low, int high)
{
 if( nCol >= ((CHeaderCtrl*)GetDlgItem(0))->GetItemCount() )
  return FALSE;

 if( high == -1 ) high = GetItemCount() - 1;

 int lo = low;
 int hi = high;
 CString midItem;

 if( hi <= lo ) return FALSE;

 midItem = GetItemText( (lo+hi)/2, nCol );

 // loop through the list until indices cross
 while( lo <= hi )
 {
  // rowText will hold all column text for one row
  CStringArray rowText;

  // find the first element that is greater than or equal to 
  // the partition element starting from the left Index.
  if( bAscending )
   while( ( lo < high ) && ( GetItemText(lo, nCol) < midItem ) )
    ++lo;
  else
   while( ( lo < high ) && ( GetItemText(lo, nCol) > midItem ) )
    ++lo;

  // find an element that is smaller than or equal to 
  // the partition element starting from the right Index.
  if( bAscending )
   while( ( hi > low ) && ( GetItemText(hi, nCol) > midItem ) )
    --hi;
  else
   while( ( hi > low ) && ( GetItemText(hi, nCol) < midItem ) )
    --hi;

  // if the indexes have not crossed, swap
  // and if the items are not equal
  if( lo <= hi )
  {
   // swap only if the items are not equal
   if( GetItemText(lo, nCol) != GetItemText(hi, nCol))
   {
    // swap the rows
    LV_ITEM lvitemlo, lvitemhi;
    int nColCount = 
     ((CHeaderCtrl*)GetDlgItem(0))->GetItemCount();
    rowText.SetSize( nColCount );
    int i;
    for( i=0; i<nColCount; i++)
     rowText[i] = GetItemText(lo, i);
    lvitemlo.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
    lvitemlo.iItem = lo;
    lvitemlo.iSubItem = 0;
    lvitemlo.stateMask = LVIS_CUT | LVIS_DROPHILITED | 
      LVIS_FOCUSED |  LVIS_SELECTED | 
      LVIS_OVERLAYMASK | LVIS_STATEIMAGEMASK;

    lvitemhi = lvitemlo;
    lvitemhi.iItem = hi;

    GetItem( &lvitemlo );
    GetItem( &lvitemhi );

    for( i=0; i<nColCount; i++)
     SetItemText(lo, i, GetItemText(hi, i));

    lvitemhi.iItem = lo;
    SetItem( &lvitemhi );

    for( i=0; i<nColCount; i++)
     SetItemText(hi, i, rowText[i]);

    lvitemlo.iItem = hi;
    SetItem( &lvitemlo );
   }

   ++lo;
   --hi;
  }
 }

 // If the right index has not reached the left side of array
 // must now sort the left partition.
 if( low < hi )
  SortTextItems( nCol, bAscending , low, hi);

 // If the left index has not reached the right side of array
 // must now sort the right partition.
 if( lo < high )
  SortTextItems( nCol, bAscending , lo, high );

 return TRUE;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -