VC如何实现treectrl父子节点联动 rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道为什么,点击父节点子节点不选中代码如下:void CNavDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult){ // TODO: 在此添加控件通知处理程序代码 NM_TREEVIEW* pHdr = (NM_TREEVIEW*)pNMHDR; *pResult = 0; CPoint point; UINT uFlag; GetCursorPos(&point); ScreenToClient(&point); HTREEITEM item = m_mytree.HitTest(point, &uFlag); if((item) && (TVHT_ONITEMSTATEICON & uFlag)) { BOOL bCheck = m_mytree.GetCheck(item); SetItemCheckState(item, !bCheck); } }void CNavDlg::SetItemCheckState(HTREEITEM item, BOOL bCheck){ SetChildCheck(item, bCheck); SetParentCheck(item, bCheck);}void CNavDlg::SetChildCheck(HTREEITEM item, BOOL bCheck){ HTREEITEM child = m_mytree.GetChildItem(item); while(child) { m_mytree.SetCheck(child, bCheck); SetChildCheck(child, bCheck); child = m_mytree.GetNextItem(child, TVGN_NEXT); }}void CNavDlg::SetParentCheck(HTREEITEM item, BOOL bCheck){ HTREEITEM parent = m_mytree.GetParentItem(item); if(parent == NULL) return; if(bCheck) m_mytree.SetCheck(parent, bCheck); else { HTREEITEM bro = m_mytree.GetNextItem(item, TVGN_NEXT); BOOL bFlag = false; while(bro) { if(m_mytree.GetCheck(bro)) { bFlag = true; break; } bro = m_mytree.GetNextItem(bro, TVGN_NEXT); } if(!bFlag) { bro = m_mytree.GetNextItem(item, TVGN_PREVIOUS); while(bro) { if(m_mytree.GetCheck(bro)) { bFlag = true; break; } bro = m_mytree.GetNextItem(bro, TVGN_PREVIOUS); } } if(!bFlag) m_mytree.SetCheck(parent, false); } SetParentCheck(parent, bCheck);} 有进到SetItemCheckState()里面吗? 按钮中动态加载bmp的问题 DLL封装对话框访问封装了ADO的DLL出错.......疯狂等待答案中 工具栏 [dxshow]请问有没有能实现 反色 的filter啊? 昨晚失眠,散分~~~~~~~~~~~~~~~ 请教如何以文件的形式往IC卡上存数据? vc中数据库编程中使用SQL语句时,如何表示“select * from table where "中的where 如何在pdf加入多层书签? 在vc中怎么样实现视频捕捉 寻邮件服务器程序,急啊!!! 外包一项目 WinCE平台,双缓冲刷新的问题?
代码如下:
void CNavDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
NM_TREEVIEW* pHdr = (NM_TREEVIEW*)pNMHDR;
*pResult = 0;
CPoint point;
UINT uFlag;
GetCursorPos(&point);
ScreenToClient(&point); HTREEITEM item = m_mytree.HitTest(point, &uFlag);
if((item) && (TVHT_ONITEMSTATEICON & uFlag))
{
BOOL bCheck = m_mytree.GetCheck(item);
SetItemCheckState(item, !bCheck);
}
}void CNavDlg::SetItemCheckState(HTREEITEM item, BOOL bCheck)
{
SetChildCheck(item, bCheck);
SetParentCheck(item, bCheck);
}
void CNavDlg::SetChildCheck(HTREEITEM item, BOOL bCheck)
{
HTREEITEM child = m_mytree.GetChildItem(item);
while(child)
{
m_mytree.SetCheck(child, bCheck);
SetChildCheck(child, bCheck);
child = m_mytree.GetNextItem(child, TVGN_NEXT);
}
}
void CNavDlg::SetParentCheck(HTREEITEM item, BOOL bCheck)
{
HTREEITEM parent = m_mytree.GetParentItem(item);
if(parent == NULL)
return; if(bCheck)
m_mytree.SetCheck(parent, bCheck);
else
{
HTREEITEM bro = m_mytree.GetNextItem(item, TVGN_NEXT);
BOOL bFlag = false;
while(bro)
{
if(m_mytree.GetCheck(bro))
{
bFlag = true;
break;
}
bro = m_mytree.GetNextItem(bro, TVGN_NEXT);
}
if(!bFlag)
{
bro = m_mytree.GetNextItem(item, TVGN_PREVIOUS);
while(bro)
{
if(m_mytree.GetCheck(bro))
{
bFlag = true;
break;
}
bro = m_mytree.GetNextItem(bro, TVGN_PREVIOUS);
}
}
if(!bFlag)
m_mytree.SetCheck(parent, false);
}
SetParentCheck(parent, bCheck);
}