void CFireWallApp::SoftInfoToList(CListCtrl &mylist,vector<SoftInfo> &InfoBox)
{
mylist.DeleteAllItems();
vector<SoftInfo>::size_type top=0;
vector<SoftInfo>::size_type bottom=InfoBox.size()-1;
for(vector<SoftInfo>::size_type i=0;i!=InfoBox.size();++i)
{
if(InfoBox[i].Isprotected==TRUE)
{
mylist.InsertItem(top,"");
mylist.SetItemText(top,1,"防溢出保护中");
mylist.SetItemText(top,2,InfoBox[i].displayName);
top++;
}
else
{
mylist.InsertItem(bottom, "");
mylist.SetItemText(bottom,1,"未保护");
mylist.SetItemText(bottom,2,InfoBox[i].displayName);
bottom--;
}
}
}把一个容器内的信息输出到列表控件中,容器内信息有个bool的变量,容器内的信息的bool变量可能为0或者1最后在列表上排列想实现bool为1的全部排在上半部分,bool为0的在下半部分初始化时,容器内所有变量的bool都为0,但是在列表中输出的形式却是隔一行再输出,而且仅输出了容器中所有数量的一半,为什么
{
mylist.DeleteAllItems();
vector<SoftInfo>::size_type top=0;
vector<SoftInfo>::size_type bottom=InfoBox.size()-1;
for(vector<SoftInfo>::size_type i=0;i!=InfoBox.size();++i)
{
if(InfoBox[i].Isprotected==TRUE)
{
mylist.InsertItem(top,"");
mylist.SetItemText(top,1,"防溢出保护中");
mylist.SetItemText(top,2,InfoBox[i].displayName);
top++;
}
else
{
mylist.InsertItem(bottom, "");
mylist.SetItemText(bottom,1,"未保护");
mylist.SetItemText(bottom,2,InfoBox[i].displayName);
bottom--;
}
}
}把一个容器内的信息输出到列表控件中,容器内信息有个bool的变量,容器内的信息的bool变量可能为0或者1最后在列表上排列想实现bool为1的全部排在上半部分,bool为0的在下半部分初始化时,容器内所有变量的bool都为0,但是在列表中输出的形式却是隔一行再输出,而且仅输出了容器中所有数量的一半,为什么
解决方案 »
- Entry-point symbol的问题
- 想截获进程连接网络(建立SOCKET通讯)的请求,如何实现?
- CString 类型变量 如何向 LPCTSTR 转化??
- 关于数值精度的问题。望指教!!!
- 我为什么无法下载帜子?
- Unhandled Exception in myfile.exe (NTDLL.DLL):0XC0000005:Access Violation!
- 请问,最近各位是否能访问sourceforge.net?我这里不能连接到sourceforge,会不会又被封了?(无内容)
- 现在VC.NET编辑器的字符太小了,尤其是语句后面的分号,800*600下根本就看不清楚,导致语法出现问题时查不处原因来,有什么办法能将字符显示
- 我这段代码为什么读和写进程的内存都失败?(WriteProcessMemory)
- 继承CBitmap类的问题
- 如何CString转换成UCHAR类型??
- 请教个MFC框架中D3D的效率问题~
2、既然InfoBox只是个入参,用来在函数中给mylist提供信息,所以应该设置为const,如下
void CFireWallApp::SoftInfoToList(CListCtrl &mylist,const vector <SoftInfo> &InfoBox)
3、遍历mylint应使用迭代器,而不是size_type
vector <SoftInfo>::iterator iter;
for(iter=InfoBox.begin(); iter!=InfoBox.end(); ++iter){
int idx = mylist.InsertItem(0, "");
mylist.SetItemText(idx, 1, "未保护"); //...这行是干嘛用的? ……_……
mylist.SetItemText(idx, 2, (*iter).displayName);
}
你可以调试一下下面这条语句:
int nRetVal = mylist.InsertItem( bottom, "" );
for循环第一次执行到这时,bottom为3,但是返回行的索引是0.
说明ListCtrl插入的行号必须是递增的,不可跨越。楼主想实现排序,可以这样:
先按照InfoBox的size,插入所有行,然后再For循环中SetItemText。
例如在for循环之前添加如下语句:
for ( UINT j = 0; j < InfoBox.size(); j++ )
{
mylist.InsertItem( j, "" );
}