• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

如何使用TreeView类显示商品分类方案?源码有BUG,求求大侠救救我!!

huafeng 2001-07-31 04:47:30
void CLeftView::AddItems()
{
/*这段代码,将商品分类方案通过CLeftView(派生自CTreeView)以树状形式显示出来。

假定商品分类方案为2,2,2:意即商品代码前二位表示商品的大类,第3/4位表示商品中类,
后2位则表示商品小类。

所用到的数据库表字段为:Code,代码;Name,名字,模拟数据如下:
Code Name
010000 饮料烟酒
010100 饮料
010101 纯净水
010102 果汁
010200 香烟
020000 洗涤用品
020100 洗衣类
020200 化妆品
..

屏幕显示应该是这样:

|-010000:饮料烟酒
| |
| |-010100:饮料
| | |
| | |-010101:纯净水
| | |-010102:果汗
| |
| |-010200:香烟
|
|-020000:洗涤用品
| |
| |-020100:洗衣类
| |-020200:化妆口
|
|
*/

CustSortSet set;
set.Open();

//此处应先找到编码规则文件,然后读取文件中保存的数据并赋值
int n=3;//共有三级
int nRule[3];
nRule[0]=2;nRule[1]=2;nRule[2]=2;//第一级编码长为2,第二级编码长为2,第三级编码长为2
int nRuleLength=6;//编码总长度为6

HTREEITEM hParent=TVI_ROOT;//父项
HTREEITEM hRoot=TVI_ROOT;//根项

CString strZero;
for (int i=0;i<n;i++)//第一级/第二级/...
{
int nLength=0;

for (int j=0;j<=i;j++)//要处理的码长,例如是第二级,则码长应该为2+2=4
nLength+=nRule[j];

set.MoveFirst();
while (!set.IsEOF()){
CString strCode=set.m_Code;

BOOL bCur=TRUE;//是要处理的级吗?

//前几级及本级不能为零,
//例如处理第二级,则第一级码不能为00,第二级码也不能为00
for (int j=0;j<=i;j++)
{
if (strCode.Left(nRule[j])=="00")
{
bCur=FALSE;
break;
}
}
//本级以后必须全为零
CString strEnd=strCode.Right(nRuleLength-nLength);

if (!bCur||atoi(strEnd)!=0)
{
set.MoveNext();
continue;
}

if (i>0)//不是首级,需找父项
{
hRoot=GetTreeCtrl().GetChildItem(TVI_ROOT);
do{
hParent=hRoot;
BOOL bFound=FALSE;//找到父项了吗?
do{
CString strText=GetTreeCtrl().GetItemText(hParent);
strText=strText.Left(nLength-nRule[i]);
// MessageBox(strText);
CString strC=strCode.Left(nLength-nRule[i]);
// MessageBox(strCode);
// MessageBox(strC);
if (strText==strC)
{
bFound=TRUE;
break;
}

hParent=GetTreeCtrl().GetNextItem(hParent,TVGN_NEXT);
if (!hParent)
break;
}while (TRUE);

if (bFound)
break;

hRoot=GetTreeCtrl().GetNextSiblingItem(hRoot);
if (!hRoot)
break;
}while (TRUE);
}

CString strTemp;
strTemp=set.m_Code+":"+set.m_Name;

GetTreeCtrl().InsertItem(strTemp,m_idxClosed,m_idxClosed,hParent);

set.MoveNext();

}

}

// GetTreeCtrl().Expand(hRoot,TVE_EXPAND);
}
...全文
89 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
huafeng 2001-08-01
我现在都有点灰心了,
回复
ExitWindows 2001-08-01
up
回复
ExitWindows 2001-08-01
up
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-07-31 04:47
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……