CTreeCtrl选取一个Item以后如何让它失去被选中状态 想在OnSelChanged中做些操作,所以必须在选择一个Item后让它失去被选中状态,不然下次接着选这个Item将无效。我用SelectItem(NULL)让它失去选中状态,结果发现SelectItem(NULL)后变成RootItem成为被选中状态了,难道必须有一个Item成为选中状态吗该怎么办呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有问题啊,我用一个按钮试的,tree属性设为show selection always#define MAXTEXTLEN 50HTREEITEM GetItemByName(HWND hWnd, HTREEITEM hItem, LPCTSTR szItemName){ // If hItem is NULL, start search from root item. if (hItem == NULL) hItem = (HTREEITEM)SendMessage(hWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0); while (hItem != NULL) { char szBuffer[MAXTEXTLEN+1]; TV_ITEM item; item.hItem = hItem; item.mask = TVIF_TEXT | TVIF_CHILDREN; item.pszText = szBuffer; item.cchTextMax = MAXTEXTLEN; SendMessage(hWnd, TVM_GETITEM, 0, (LPARAM)&item); // Did we find it? if (lstrcmp(szBuffer, szItemName) == 0) return hItem; // Check whether we have child items. if (item.cChildren) { // Recursively traverse child items. HTREEITEM hItemFound, hItemChild; hItemChild = (HTREEITEM)SendMessage(hWnd, TVM_GETNEXTITEM, TVGN_CHILD, (LPARAM)hItem); hItemFound = GetItemByName(hWnd, hItemChild, szItemName); // Did we find it? if (hItemFound != NULL) return hItemFound; } // Go to next sibling item. hItem = (HTREEITEM)SendMessage(hWnd, TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)hItem); } // Not found. return NULL;} void CGhghfDlg::OnButton1() { HTREEITEM hItem = GetItemByName(m_tree.GetSafeHwnd(), NULL, "111"); if (hItem != NULL) m_tree.SelectItem(hItem);}void CGhghfDlg::OnButton2() { m_tree.SelectItem(NULL);} tree有没有“必须有一个被选中”的属性? ADO + server 2008 一个奇怪的存储过程错误 如何将一个对话框即可以单独使用又可以作为向导中的其中一页? OLE和OLE2(com)组件,到底有什么不同? 一个关于事件通知模型的问题。请开发过的进来帮忙。 MFC中CToolBar的通知消息有哪些?(不好意思,没办法给分) 弱弱的问个问题? 求助:基于对话框程序的程序隐藏对话框背景 各位大哥好,小弟想向各们请教一个问题(进来就有分) EXCEL中有那些对象啊!最好有手册参考 CSDN是不是国内最大的程序员论坛了?有没有更大的?全国最有名,最大的程序员论坛是? 如何获得listview总列数? 救命啊,关于超线程的诡异问题!
#define MAXTEXTLEN 50HTREEITEM GetItemByName(HWND hWnd, HTREEITEM hItem,
LPCTSTR szItemName)
{
// If hItem is NULL, start search from root item.
if (hItem == NULL)
hItem = (HTREEITEM)SendMessage(hWnd, TVM_GETNEXTITEM,
TVGN_ROOT, 0);
while (hItem != NULL)
{
char szBuffer[MAXTEXTLEN+1];
TV_ITEM item; item.hItem = hItem;
item.mask = TVIF_TEXT | TVIF_CHILDREN;
item.pszText = szBuffer;
item.cchTextMax = MAXTEXTLEN;
SendMessage(hWnd, TVM_GETITEM, 0, (LPARAM)&item); // Did we find it?
if (lstrcmp(szBuffer, szItemName) == 0)
return hItem; // Check whether we have child items.
if (item.cChildren)
{
// Recursively traverse child items.
HTREEITEM hItemFound, hItemChild; hItemChild = (HTREEITEM)SendMessage(hWnd, TVM_GETNEXTITEM,
TVGN_CHILD, (LPARAM)hItem);
hItemFound = GetItemByName(hWnd, hItemChild, szItemName); // Did we find it?
if (hItemFound != NULL)
return hItemFound;
} // Go to next sibling item.
hItem = (HTREEITEM)SendMessage(hWnd, TVM_GETNEXTITEM,
TVGN_NEXT, (LPARAM)hItem);
} // Not found.
return NULL;}
void CGhghfDlg::OnButton1()
{
HTREEITEM hItem = GetItemByName(m_tree.GetSafeHwnd(),
NULL, "111");
if (hItem != NULL)
m_tree.SelectItem(hItem);}void CGhghfDlg::OnButton2()
{
m_tree.SelectItem(NULL);
}