//窗口过程函数

INT_PTR CALLBACK myWin::myWinDlgProc(HWND dlgHwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ switch (uMsg)
{
case WM_COMMAND:
{
OnCommand(wParam, lParam);
return 1;
} case WM_ACTIVATE:
if (WA_INACTIVE != LOWORD(wParam)) {
SetFocus(dlgHwnd);
}
return TRUE; case WM_CLOSE:
DestroyWindow(dlgHwnd);
return 1;
case WM_DESTROY:
PostQuitMessage(0);
return 0; case WM_INITDIALOG:
win_hWnd = dlgHwnd;
OnInitDialog();
return 1; case WM_CONTEXTMENU:
OnContextMenu(wParam);
return 1; case WM_NOTIFY:
OnNotify(wParam,lParam);//树形控件返射消息
return 1;
}
return 0;
}


BOOL MyAppClass::OnNotify(WPARAM wParam, LPARAM lParam)
{
LPNMHDR lphr = (LPNMHDR)lParam;
if (lphr->hwndFrom == hTree)  //判断是否是树形控件发来的消息
{
  

    switch (lphr->code)
    {
    case NM_CLICK:  //鼠标单击
    OnCloickTree(lphr);
    break;


    case NM_DBLCLK:  //鼠标双击
    OnRCloickTree(lphr);
    break;
    }

   }

    return TRUE;
}
//鼠标双击消息
void MyAppClass::OnRCloickTree(LPNMHDR lphr)
{ HTREEITEM htItem;
TVITEM tvi;
htItem = TreeView_GetSelection(hTree); if (htItem == NULL)
return;
TCHAR szText[20];
memset(&tvi, 0, sizeof(tvi));
tvi.mask = TVIF_TEXT | TVIF_PARAM;
tvi.hItem = htItem;
tvi.pszText = szText;
tvi.cchTextMax = sizeof(szText);
TreeView_GetItem(hTree, &tvi); SetDlgItemText(win_hWnd, IDC_EDIT1, szText);
}

  我一直用这写在单击消息中,老是得到前一个选中项的数据

弄了好几天,查了好多资料都不行,连MFC我的复制过来还是不行,晕死了.

最后在网上找了好久才找到要单击要用鼠标坐标来判断,用TreeView_HitTest()宏,

这他妈的从哪知道呀.

void MyAppClass::OnCloickTree(LPNMHDR param1)
{ TVHITTESTINFO thti;
HTREEITEM htItem;
TVITEM tvi;
POINT point; GetCursorPos(&point);
ScreenToClient(hTree, &point);
thti.pt = point;
thti.flags = TVHT_TORIGHT;
htItem = TreeView_HitTest(hTree, &thti); if (htItem == NULL)
return; TCHAR szText[20];
memset(&tvi, 0, sizeof(tvi));
tvi.mask = TVIF_TEXT | TVIF_PARAM;
tvi.hItem = htItem;
tvi.pszText = szText;
tvi.cchTextMax = sizeof(szText);
TreeView_GetItem(hTree, &tvi); SetDlgItemText(win_hWnd, IDC_EDIT1, szText); }

以上都在vs2017中测试通过

Win32 sdk 下树形控件响应鼠标单击与双击,获得选中项的名称的更多相关文章

  1. win32: 文本编辑框(Edit)控件响应事件

    过去几年,关于文本编辑框(Edit)控件的响应事件,我都是在主程序 while(GetMessage(&messages, NULL, 0, 0)) { ... } 捕获. 总感觉这种方式让人 ...

  2. win32 sdk列表视图控件(ListCtrl或ListView)资料整理

    列表视图控件是一种非常常用的控件,在需要以报表形式显示数据时,列表控件通常是最好的选择,许多专用的数据报表控件,也是在它的基础上派生而来.与树视图类似,列表控件可以由多个子项目组成,可以设置为Icon ...

  3. win32 sdk绘制ListBox控件

    1>产生: // HWND CreateLB(HWND parentWnd) { HWND hListBox=0; hListBox = CreateWindow("LISTBOX&q ...

  4. win32 sdk 列表视图控件绘制

    ////////////////////////////////////////////////////////////// LRESULT ListViewCustomDraw(HWND hwnd, ...

  5. Element-ui树形控件el-tree鼠标移入显示隐藏效果超简单

    显示效果: 废话不多说,直接上代码 <template> <el-tree default-expand-all :data="data"> <spa ...

  6. vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解

    做后端管理系统,永远是最蛋疼.最复杂也最欠揍的事情,也永远是前端开发人员最苦逼.最无奈也最尿性的时刻.蛋疼的是需求变幻无穷,如同二师兄的三十六般变化:复杂的是开发难度寸步难行,如同蜀道难,难于上青天: ...

  7. 解决easyUI下拉控件无法触发onkeydown事件

    实现在combotree下拉控件中按Backspace键清除combotree选中的值 下面的代码无法获取到键盘事件 <input class="easyui-combotree&qu ...

  8. VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)

    前面一节讲了树形控件Tree Control的简介.通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建.CTreeCtrl类的主要成员函数和应用实例. 树形控件的创建 MFC为树形控件提 ...

  9. VS2010-MFC(常用控件:树形控件Tree Control 下)

    转自:http://www.jizhuomi.com/software/203.html 前面一节讲了树形控件Tree Control的简介.通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件 ...

  10. Delphi 获取当前鼠标下的控件内容

    Delphi 获取当前鼠标下的控件内容 主要函数: GetCursorPos://获取鼠标的位置 WindowFromPoint://获取制定point下的handle GetClassName:// ...

随机推荐

  1. 在Java中如何通过优化代码来节省内存

    Java 程序的一个常见问题是高内存使用率,这会导致性能问题甚至崩溃.因此,需要使用内存节省技术来优化 Java 代码并减少内存使用非常重要. 选择正确的数据类型: 使用适当大小的数据类型可以避免不必 ...

  2. SpringBoot排查自动装配、Bean、Component、Configuration配置类

    排除自动装配AutoConfiguration @SpringBootApplication( exclude = { DataSourceAutoConfiguration.class, Mybat ...

  3. yb课堂 开发前端项目路由 《三十五》

    Vue-Router开发前端项目路由 vue-router 是Vue.js官方的路由管理器,它和Vue.js的核心深度集成,让构建单页面应用变得易如反掌 官方文档:https://router.vue ...

  4. 洛谷P1063

    [NOIP2006 提高组] 能量项链 题目描述 在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链.在项链上有 \(N\) 颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着 ...

  5. C++11标准库<chrono><future> <atomic><condition_variable><mutex><thread>梳理 (5万字)

    <chrono> C++11中提供了日期和时间相关的库chrono. chrono库主要包含三种类型的类:时间间隔duration.时钟clocks.时间点time point. 时间间隔 ...

  6. leetcode中等(字符串):[3, 6, 8, 49, 179, 299, 524, 539, 609, 648]

    目录 3. 无重复字符的最长子串 6. Z 字形变换 8. 字符串转换整数 (atoi) 49. 字母异位词分组 179. 最大数 299. 猜数字游戏 524. 通过删除字母匹配到字典里最长单词 5 ...

  7. Odoo 自定义form表单按钮点击事件处理程序

    实践环境 Odoo 14.0-20221212 (Community Edition) 代码实现 方案1 通过研究发现,点击odoo form表单按钮时,会调用odoo14\odoo\addons\w ...

  8. vscode 常用设置

    vscode 常用设置   by:授客 QQ:1033553122   版本 vscode Version: 1.33.1   1.   自动保存文件设置 文件编辑一秒钟过后自动保存 2.   黏贴后 ...

  9. QT 的 ModelView

    QApplication a(argc, argv); QDirModel model;    //QDirModel,   问文件目录树 QTreeView tree;    QListView l ...

  10. 同时使用mp和mybatis,我的type-aliases-package失效了

    mybatis: #mapper配置文件 mapper-locations: classpath:mapper/*.xml type-aliases-package: com.sky.entity c ...