网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > C语言代码 > 正文

CTreeCtrl树节点排序,节点复选(菜鸟版)

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
效果描述:该功能可使某义节点下的全部子节点按某种序列重新排列SortChildren是为该结点下面的所有子节点排序,注意只是子节点,不包括子节点的子节点。
SortChildrenCB是自定义排序方式。现给出大体例子
SortChildrenCB中的TVSORTCB需要用到一个回调函数常常是难点。
INT CHvrTree::SortItem(HTREEITEM hItem)
{
    BOOL bRet;
    CHvrTree *ptree = this;   
    TVSORTCB sortpage;   

    g_pLogger->Debug("<%s(%d)> SortItem(): Enter",D_PC_LOG_NAME_HVRTREE, __LINE__);    
    //////////////////////////////////////////////////////////////////////////
    // ソーティング情報
    g_pLogger->Info("<%s(%d)> SortItem(): ソーティングノード,hItem - %08x"
        ,D_PC_LOG_NAME_HVRTREE, __LINE__,hItem );    

    sortpage.hParent = hItem;   
    sortpage.lpfnCompare = MyCompareProc;   
    sortpage.lParam = (LPARAM)ptree;
    bRet =     SortChildrenCB(&sortpage);   
    if ( bRet )
    {
        g_pLogger->Debug("<%s(%d)> SortItem(): Leave",D_PC_LOG_NAME_HVRTREE, __LINE__);    

        return D_PC_SUCCESS;
    }
    else
    {
        g_pLogger->Debug("<%s(%d)> SortItem(): Leave",D_PC_LOG_NAME_HVRTREE, __LINE__);    

        return D_PC_FAILURE;
    }
}

入口参数是两个在要排序的序列中的无序参数
INT CALLBACK CHvrTree::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
    CHvrTree* pTreeCtrl = (CHvrTree*) lParamSort;

    HTREEITEM hItem1 = (HTREEITEM)lParam1;
    HTREEITEM hItem2 = (HTREEITEM)lParam2;

    // ノードのアイコンに付けられた固有の番号によって、ノードタイプ取得
    
    INT nKind1 = pTreeCtrl->GetItemType(hItem1);
    INT nKind2 = pTreeCtrl->GetItemType(hItem2);    
    
    // 1.01 : カテゴリソーティングを機能修正
    //////////////////////////////////////////////////////////////////////////
    // ノードタイプ取得チェック
    if ( (nKind1<0)||(nKind2<0) )
    {
         g_pLogger->Error( "<%s(%d)> MyCompareProc: 目標ノードノードタイプ情報取得できない, nType - %d",
                        D_PC_LOG_NAME_HVRTREE, __LINE__, D_PC_FAILURE );

         return D_PC_ERRCODE_HVRTREE_GETTREE_FAIL;
    }
    // 1.01 - END
    
    // ノード情報取得
    BOOL bRet;
    ST_TREE_NODE *pnodeInfo1 = NULL;                // ノード1の情報
    ST_TREE_NODE *pnodeInfo2 = NULL;                // ノード2の情報

    bRet = pTreeCtrl->m_mapNode.Lookup(hItem1,(void*&)pnodeInfo1); // ノード1の情報取得
    
    if(bRet == FALSE)
    {
        // 目標ノード情報取得できない
         g_pLogger->Error( "<%s(%d)> MyCompareProc: 目標ノード情報取得できない, hItem - %08x",
                   D_PC_LOG_NAME_HVRTREE, __LINE__, hItem1 );
         return D_PC_ERRCODE_HVRTREE_GETTREE_FAIL;
    }
    
    bRet = pTreeCtrl->m_mapNode.Lookup(hItem2,(void*&)pnodeInfo2); // ノード2の情報取得
    
    if(bRet == FALSE)
    {
        // 目標ノード情報取得できない
         g_pLogger->Error( "<%s(%d)> MyCompareProc: 目標ノード情報取得できない, hItem - %08x",
                        D_PC_LOG_NAME_HVRTREE, __LINE__, hItem2 );
         return D_PC_ERRCODE_HVRTREE_GETTREE_FAIL;
    }

    INT nRet = NULL;                        // 戻り値

    if( nKind1 == nKind2)
    {
        // ノード1とノード2は同じノードタイプの場合

        // ノード1とノード2はカテゴリーノードの場合    
        if( nKind1 == D_PC_NODE_CATE_1)
        {
            CString strItem1,strItem2;
            // カテゴリー名取得
            strItem1 = pTreeCtrl->GetItemText(hItem1);
            strItem2 = pTreeCtrl->GetItemText(hItem2);
            // カテゴリー名比較
            nRet = strcmp(strItem1, strItem2);

        }

        // 1.01 : カテゴリソーティングを機能修正
        else if( nKind1 == D_PC_NODE_CATE_2)
        {
            CString strItem1,strItem2;
            // カテゴリー名取得
            strItem1 = pTreeCtrl->GetItemText(hItem1);
            strItem2 = pTreeCtrl->GetItemText(hItem2);
            // カテゴリー名比較
            nRet = strcmp(strItem1, strItem2);

        }
        // 1.01 - END
        
        else if( nKind1 == D_PC_NODE_CAM )
        {
            // ノード1とノード2はカメラノードの場合
            // カメラ番号取得
            INT nCamId1 = pnodeInfo1->Id;            
            INT nCamId2 = pnodeInfo2->Id;
            // カメラ番号比較
            nRet = nCamId1 - nCamId2;
        }
        else if( nKind1 == D_PC_NODE_HVR )
        {
            // ノード1とノード2は物件ノードの場合
            ST_HVR_INFO hvrInfo1, hvrInfo2;
            CString strItem1, strItem2;
            // 物件番号取得
            INT nHvrId1 = pnodeInfo1->Id;            
            INT nHvrId2 = pnodeInfo2->Id;            
      &nb
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师