哪位大神給看一下,listview排序的問題,
//處理單擊訊息
case WM_NOTIFY:
NMHDR * pNMHDR= (NMHDR *) lParam;
listview=GetDlgItem(hWnd,IDC_LIST1);
if(pNMHDR->code==LVN_COLUMNCLICK)
{
//LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR;
ListView_SortItems(listview,CompareFunc,(LPARAM)pNMListView->iSubItem);
if(sort_type==false)
sort_type=true;
else
sort_type=false;
break;
}
//回呼函式撰寫
int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
static TCHAR szBuf1[50], szBuf2[50];
int ret;
ListView_GetItemText(listview, lParam1, lParamSort, szBuf1, 50);
ListView_GetItemText(listview, lParam2, lParamSort, szBuf2, 50);
if(sort_type)
{
ret = lstrcmp(szBuf1, szBuf2);
}
else
{
ret = -lstrcmp(szBuf1, szBuf2);
}
return ret;
}
//往listview里邊添內容
LVITEMA item1
Info info[4];//定義一個結構體,期中只有一個TCHAR s1[max_path];
ZeroMemory(&info,sizeof(info)/sizeof(Info));
HWND list1=GetDlgItem(hwnd,IDC_LIST1); //得到listview句柄
ZeroMemory(&item1,sizeof(item1)/sizeof(LVITEMA));
int ItemCount = ListView_GetItemCount(list1); //得到listview行數
item1.mask=LVIF_TEXT|LVIF_PARAM;
item1.iSubItem=0;
item1.iItem=ItemCount;
item1.pszText=info[0].s1;
int j=ListView_InsertItem(list1,&item1);
item1.lParam=j;
for (int i=1; i<4; i++)
{
item1.iSubItem=i;
ListView_SetItemText(list1,j,i,info[i].s1);
}
uj5u.com熱心網友回復:
關于listview的單擊排序問題回頭給你發我以前的一段代碼
用STL標準庫
uj5u.com熱心網友回復:
好的,先謝了,我的qq:343379173uj5u.com熱心網友回復:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1ColumnClick(TObject *Sender, TListColumn *Column)
{
int i, m, n, j ;
static bool od = true ;
const AnsiString Captions1[4]={"姓名","性別","籍貫","學歷"} ;
for(int i=0; i<ListView1->Columns->Count; ++i)
ListView1->Columns->Items[i]->Caption = Captions1[i] ;
od = !od ;
n = Column->Index ;
m = ListView1->Items->Count ;
if(od)
{
Column->Caption = Column->Caption + "△" ;
}
else
Column->Caption = Column->Caption + "▽" ;
ListView1->Items->Add();
if (n==0)
{
for(i=0;i< m-1;i++)
for(j=i+1;j< m;j++)
if(od)
{
if(ListView1->Items->Item[i]->Caption > ListView1->Items->Item[j]->Caption)
{
ListView1->Items->Item[m] = ListView1->Items->Item[i] ;
ListView1->Items->Item[i] = ListView1->Items->Item[j] ;
ListView1->Items->Item[j] = ListView1->Items->Item[m] ;
}
}
else
{
if(ListView1->Items->Item[i]->Caption < ListView1->Items->Item[j]->Caption)
{
ListView1->Items->Item[m] = ListView1->Items->Item[i];
ListView1->Items->Item[i] = ListView1->Items->Item[j];
ListView1->Items->Item[j] = ListView1->Items->Item[m];
}
}
}
else
{
for(i=0;i< m-1;i++)
for(j=i+1;j< m;j++)
if(od)
{
if(sg(ListView1->Items->Item[i]->SubItems->Text,n-1) > sg(ListView1->Items->Item[j]->SubItems->Text,n-1))
{
ListView1->Items->Item[m] = ListView1->Items->Item[i] ;
ListView1->Items->Item[i] = ListView1->Items->Item[j] ;
ListView1->Items->Item[j] = ListView1->Items->Item[m] ;
}
}
else
{
if(sg(ListView1->Items->Item[i]->SubItems->Text,n-1) < sg(ListView1->Items->Item[j]->SubItems->Text,n-1))
{
ListView1->Items->Item[m] = ListView1->Items->Item[i];
ListView1->Items->Item[i] = ListView1->Items->Item[j];
ListView1->Items->Item[j] = ListView1->Items->Item[m];
}
}
}
ListView1->Items->Delete(m);
}
//---------------------------------------------------------------------------
AnsiString TForm1::sg(AnsiString str,int n)
{
int i,l;
AnsiString qq(str);
l = qq.Length();
AnsiString p(str);
char a[]="\r\n";
int j=0,k=0;
for(j=1;j < l;j++)
{
i=1;
while(qq[j]!=a[0] && qq[j+1]!=a[1])
{
p[i++]=qq[j];
j++;
}
k++;
if((k-1)==n)
break;
}
p[i]=NULL;
return (p);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
// 下移i++;
// 上移i--;
int j ;
int m ;
m = ListView1->Items->Count ;
if(ListView1->SelCount == 0)
{
ShowMessage("請選擇需要移動的專案!") ;
return ;
}
i = ListView1->Items->IndexOf(ListView1->Selected);
// i-- ;
j = i - 1 ;
if(j<0)
{
ListView1->Items->Item[j+1]->Selected=True;
ListView1->SetFocus() ;
return ;
}
else
{
ListView1->Items->Add();
ListView1->Items->Item[m] = ListView1->Items->Item[i];
ListView1->Items->Item[i] = ListView1->Items->Item[j];
ListView1->Items->Item[j] = ListView1->Items->Item[m];
ListView1->Items->Delete(m);
ListView1->Items->Item[j]->Selected=True;
ListView1->SetFocus() ;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int j ;
int m ;
m = ListView1->Items->Count ;
if(ListView1->SelCount == 0)
{
ShowMessage("請選擇需要移動的專案!") ;
return ;
}
i = ListView1->Items->IndexOf(ListView1->Selected);
j = i + 1 ;
if(j > ListView1->Items->Count - 1)
{
ListView1->Items->Item[j-1]->Selected=True;
ListView1->SetFocus() ;
return ;
}
else
{
ListView1->Items->Add();
ListView1->Items->Item[m] = ListView1->Items->Item[i];
ListView1->Items->Item[i] = ListView1->Items->Item[j];
ListView1->Items->Item[j] = ListView1->Items->Item[m];
ListView1->Items->Delete(m);
ListView1->Items->Item[j]->Selected=True;
ListView1->SetFocus() ;
}
}
//---------------------------------------------------------------------------
uj5u.com熱心網友回復:
還是不太明白?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151531.html
上一篇:求c/c++大神賜教!
