对于二进制文件的读取,就用TStream之类的就可以,我不用多说了。关键是ListView的处理,步骤如下:
(你将问题提在C++Builder版中,我就用C++Builder代码了)
首先,ListView1->OwnerData = true;
然后,计算一个这些二进制数据如果全部添加到ListView控件
中共需要多少行告诉ListView,具体就是:ListView1->Items->Count = 你计算出来的行数 ;
接下来是OnData和OnDataHint事件处理代码部分
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1Data(TObject *Sender, TListItem *Item)
{
if( Item->Index < 你计算出来的行数 )
{
Item->Caption = 第一项 ;
Item->SubItems->Add( 第二项 ) ;
Item->SubItems->Add( 第三项 ) ;
......
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListView1DataHint(TObject *Sender,
int StartIndex, int EndIndex)
{
if( (StartIndex < 你计算出来的行数) &&
(EndIndex < 你计算出来的行数) )
{
//处理代码
//这个事件的意思是当ListView控件中的内容发生变化时,就触发这个事件
//比如:有些项的值不是现成的,而是要经过复杂的计算,才得到的
//就应该放在这来处理,因为一次处理几十个这样的项比一次处理几万个这样的项速度不知要
//快多少倍!!这就是为什么说负荷重的工作要在这里完成的道理
//所以说,这里处理的好将极大的提升ListView的显示速度
//我估计,如果你在二进制数据的读取处理上做得很好的话,用上面的方法在ListView的显示上只
//需要零点几秒钟
}
}
//---------------------------------------------------------------------------
如果我上面说的这些你还没完全明白的话,你最好去看看VirtualListView这个例子程序,(这个例子
稍微难懂一点是因为里面用了底层的Shell接口)