CMyTreeCtrl* pTreeCtrl = reinterpret_cast<CMyTreeCtrl*>( lParamData );
ASSERT( pTreeCtrl->IsKindOf( RUNTIME_CLASS( CTreeCtrl ) ) ); HTREEITEM hItem1=(HTREEITEM )lParam1;
HTREEITEM hItem2=(HTREEITEM )lParam2;
CString strName1=pTreeCtrl->GetItemText(hItem1);
TRACE(strName1);
CString strName2=pTreeCtrl->GetItemText(hItem2);
TRACE(strName2);
可是 strName1和strName2都没有返回值
ASSERT( pTreeCtrl->IsKindOf( RUNTIME_CLASS( CTreeCtrl ) ) ); HTREEITEM hItem1=(HTREEITEM )lParam1;
HTREEITEM hItem2=(HTREEITEM )lParam2;
CString strName1=pTreeCtrl->GetItemText(hItem1);
TRACE(strName1);
CString strName2=pTreeCtrl->GetItemText(hItem2);
TRACE(strName2);
可是 strName1和strName2都没有返回值
http://search.csdn.net/Expert/topic/1363/1363237.xml?temp=.6535608
我看过了,但是做起来还是不对!!
void CDlgDlg::SortTree(HTREEITEM hItem)
{
CTreeCtrl * ptree=&m_tree;
TVSORTCB sortpage;
sortpage.hParent=hItem;
sortpage.lpfnCompare=TreeCompareFunction;
sortpage.lParam=(LPARAM)ptree;
m_tree.SortChildrenCB(&sortpage);
}
static int CALLBACK TreeCompareFunction( LPARAM lParam1, LPARAM lParam2, LPARAM lParamData )
{
CTreeCtrl* pTree=(CTreeCtrl*)lParamData;
HTREEITEM hItem1=(HTREEITEM)lParam1;
HTREEITEM hItem2=(HTREEITEM)lParam2;
CString strName1=pTree->GetItemText((HTREEITEM)lParam1);
CString strName2=pTree->GetItemText((HTREEITEM)lParam1);
return strcmp(strName1,strName2);
// DWORD dw1=pTree->GetItemData(hItem1);
// DWORD dw2=pTree->GetItemData(hItem2);
// return dw1-dw2;
}
上面显示的strName1和strName2值为“”,而且如果使用下面的GetItemData的话就出错!
msdn example:
// Sort the item in reverse alphabetical order.
static int CALLBACK
MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
// lParamSort contains a pointer to the tree control.
// The lParam of an item is just its handle.
CTreeCtrl* pmyTreeCtrl = (CTreeCtrl*) lParamSort;
CString strItem1 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam1);
CString strItem2 = pmyTreeCtrl->GetItemText((HTREEITEM) lParam2); return strcmp(strItem2, strItem1);
} // The pointer to my tree control.
extern CTreeCtrl* pmyTreeCtrl;
TVSORTCB tvs; // Sort the items in the tree control using my
// callback procedure.
tvs.hParent = TVI_ROOT;
tvs.lpfnCompare = MyCompareProc;
tvs.lParam = (LPARAM) pmyTreeCtrl; pmyTreeCtrl->SortChildrenCB(&tvs);
这个例子我看过的,但是为什么我写的时候不对,我感觉我写的代码跟这个一样的阿。有什么问题吗?
执行不对,我哪个地方做的不对吗?
struct TREEITEMDATA
{
CString strItemText;
}
TREEITEMDATA *pItem = new TREEITEMDATA;
pItem->strItemText = GetItemText( hItem );
SetItemData( hItem , (DWORD)pItem );....
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
TREEITEMDATA *pItem1 = reinterpret_cast<TREEITEMDATA*>( lParam1 );
TREEITEMDATA *pItem2 = reinterpret_cast<TREEITEMDATA*>( lParam2 );
if(pItem1 == NULL || pItem2 == NULL )
return 0;
return pItem1->strItemText.Compare( pItem2->strItemtext);
}
http://community.csdn.net/Expert/topic/3581/3581655.xml?temp=.8597071