void CSpectrumDlg::OnClickTree1(NMHDR *pNMHDR, LRESULT *pResult){// TODO: 在此添加控件通知处理程序代码CTreeCtrl* pTreeCtrl = (CTreeCtrl*)this->GetDlgItem(IDC_TREE1);UINT nFlag;CPoint pt;GetCursorPos(&pt); //获得屏幕光标坐标pTreeCtrl->ScreenToClient(&pt);//转换到树HTREEITEM hitem = pTreeCtrl->HitTest(pt,&nFlag);//碰撞检测if(hitem && (nFlag & TVHT_ONITEMSTATEICON)){//点击的是checkbox框BOOL isCheck = pTreeCtrl->GetCheck(hitem);//获得item的check属性isCheck = !isCheck;//设置此节点的checkbox状态。//pTreeCtrl->SetCheck(hitem,1);//此句加上就错了,应为默认的程序对单机复选框已经有了相关的//事件处理方式(取反),先执行此取反操作后,然后系统又调用系统默认的方法又一次取反了!!//设置子节点的图标resetChildItem(pTreeCtrl,hitem,isCheck); //设置父节点的图标(使某个原来全选中的一个子节点未选中,则其父节点也要变成为选中)if(!isCheck){HTREEITEM parent = pTreeCtrl->GetParentItem(hitem);while(parent){pTreeCtrl->SetCheck(parent,isCheck);parent = pTreeCtrl->GetParentItem(parent);}}}*pResult = 0;}void CSpectrumDlg::resetChildItem( CTreeCtrl* pTreeCtrl, HTREEITEM hitem, BOOL isCheck ){ HTREEITEM child = pTreeCtrl->GetChildItem(hitem); while(child){ pTreeCtrl->SetCheck(child,isCheck); resetChildItem(pTreeCtrl,child,isCheck); child = pTreeCtrl->GetNextSiblingItem(child); }} :nFlag可用的变量其中flags测试结果可以是如下值:TVHT_ABOVE 在客户区域上面TVHT_BELOW 在客户区域下面TVHT_NOWHERE 在客户区域中并在最后一项下面TVHT_ONITEM 在与树项关联的位图或标签内TVHT_ONITEMBUTTON 在与树项关联的按钮上TVHT_ONITEMICON 在与树项关联的位图上TVHT_ONITEMINDENT 在与树项关联的联线上TVHT_ONITEMLABEL 在与树项关联的标签上TVHT_ONITEMRIGHT 在树项的右侧区域中TVHT_ONITEMSTATEICON 在用户定义的状态图标上TVHT_TOLEFT 在客户区域的左侧1.带checkbox的treectrl控件,点击复选框的操作(选中时,使其子节点全选中。未选中时,使其子节点和所有父节点全未选中)
TVHT_TORIGHT 在客户区域的右侧
2.CToolTipCtrl的使用
1.initial中添加
EnableToolTips(TRUE);
2.改写消息函数
3.使用BOOL CXXX::PreTranslateMessage(MSG* pMsg) { // TODO: ÔÚ´ËÌí¼ÓרÓôúÂëºÍ/»òµ÷ÓûùÀà if(!m_TooltipCtrl){ m_TooltipCtrl.Create(this); m_TooltipCtrl.SetMaxTipWidth(10); } m_TooltipCtrl.RelayEvent(pMsg); return CScrollView::PreTranslateMessage(pMsg); }
m_TooltipCtrl.Activate(TRUE); m_TooltipCtrl.AddTool(this,str); m_TooltipCtrl.Update();
MFC控件使用
最新推荐文章于 2022-12-20 21:29:24 发布