VC++ CTreeCtrl 使用NM_CLICK和TVN_SELCHANGED
2015-08-30 21:53
609 查看
//这是当CTREECTRL控件点击时NM_CLICK的处理函数
在这里需要指出 HitTest 函数不但可以检测出是否在item上 也可以检测出 位于 item项的 哪个位置请看 MSDN的说明
由此可以更加灵活的使用的CTREECTL控件了
例如下面 例子:
下面是关于 选项改变时的函数
void CDriverSelCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult) { CPoint curPoint; UINT nFlags; HTREEITEM hItem; GetCursorPos(&curPoint); //当前点坐标 ScreenToClient(&curPoint); //屏幕坐标转换为TREE内坐标 hItem = HitTest(curPoint, &nFlags); //坐标是否有ITEM if (hItem && (TVHT_ONITEM & nFlags)) //判断是否有HTREEITEM { this->SelectItem(hItem);//在这里处理点击后的结果 } // TODO: 在此添加控件通知处理程序代码 *pResult = 0; }
在这里需要指出 HitTest 函数不但可以检测出是否在item上 也可以检测出 位于 item项的 哪个位置请看 MSDN的说明
Value | Meaning |
---|---|
TVHT_ABOVE | Above the client area. |
TVHT_BELOW | Below the client area. |
TVHT_NOWHERE | In the client area, but below the last item. |
TVHT_ONITEM | On the bitmap or label associated with an item. |
TVHT_ONITEMBUTTON | On the button associated with an item. |
TVHT_ONITEMICON | On the bitmap associated with an item. |
TVHT_ONITEMINDENT | In the indentation associated with an item. |
TVHT_ONITEMLABEL | On the label (string) associated with an item. |
TVHT_ONITEMRIGHT | In the area to the right of an item. |
TVHT_ONITEMSTATEICON | On the state icon for a tree-view item that is in a user-defined state. |
TVHT_TOLEFT | To the left of the client area. |
TVHT_TORIGHT | To the right of the client area. |
例如下面 例子:
void CDriverSelCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult) { CPoint point; UINT uFlag; BOOL bCheck; GetCursorPos(&point); CTreeCtrl::ScreenToClient(&point); HTREEITEM hTree = CTreeCtrl::HitTest(point, &uFlag); if (hTree && (TVHT_ONITEMSTATEICON & uFlag)) { CTreeCtrl::SelectItem(hTree); bCheck = CTreeCtrl::GetCheck(hTree); } // TODO: 在此添加控件通知处理程序代码 *pResult = 0; }
下面是关于 选项改变时的函数
//这是当控件的选择发生变化时的处理函数 void CDriverSelCtrl::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); pNMTreeView->itemNew //选中HTREEITEM pNMTreeView->itemOld //上次选中HTREEITEM // TODO: 在此添加控件通知处理程序代码 *pResult = 0; }
相关文章推荐
- Effective C++ 条款26 尽可能延后变量定义式的出现时间
- C++虚函数与虚表
- C++虚函数与虚表
- 关于c++中字符串的输入问题
- Notepad++改造成C/C++ IDE [真正意义上的IDE]
- Effective C++ 条款25 考虑写出一个不抛出异常的swap函数
- 简单的C语言语法-scanf
- C++虚函数和纯虚函数
- CRect::DeflateRect()
- 哈夫曼树 C语言实现 原创下改正
- C语言基础知识之(十五):指针和函数
- C语言基础知识之(十四):指针和字符数组、字符串数组
- C语言基础知识之(十三):指针、指针和数组
- C++程序设计:求最大公约数和最小公倍数的算法
- 编译防火墙——C++的Pimpl惯用法解析
- C++中定义自己的头文件
- int * const p 与int const *p或者const int *p的区别
- 汉字的区码和位码怎么用C语言求出来的方法
- c++ 编译链接 相关【 原创 + 转载】
- 快速排序的C语言实现