//窗口过程函数

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. 合并STM32 iap的hex文件合并为一个hex文件

    --- title: 合并STM32 iap的hex文件合并为一个hex文件 date: 2020-06-15 04:32:26 categories: tags: - iap - stm32 --- ...

  2. T3/A40i支持Linux-5.10新内核啦,Docker、Qt、Python统统升级!

    自2021年创龙科技推出全志国产化率100%的T3/A40i工业核心板后,不到两年时间已超过800家工业客户选择创龙科技T3/A40i平台.随着客户产品的不断升级与迭代,部分"能源电力&qu ...

  3. 【AppStore】一文让你学会IOS应用上架Appstore

    前言 咱们国内现在手机分为两类,Android手机与苹果手机,现在用的各类APP,为了手机的使用安全,避免下载到病毒软件,官方都极力推荐使用手机自带的应用商城进行下载,但是国内Android手机品类众 ...

  4. Restful和WebService区别

    简介 Restful是一种架构风格,其核心是面向资源,更简单: 而webService底层SOAP协议,主要核心是面向活动: 两个都是通过web请求调用接口 RESTful是什么 REST就是(REp ...

  5. react-devtools安装以及使用中的问题

    使用react框架开发的小伙伴肯定都想使用想vue-devtools开发工具一样,可以看见组件的状态,和当前组件里的props,data等等. 当然react也有一个开发者工具,现在废话少说,开始安装 ...

  6. 使用scikit-learn构建模型

    sklearn中还存在许多不同的机器学习模型可以直接调用,相比于自己撰写代码,直接使用sklearn的模型可以大大提高效率. sklearn中所有的模型都有四个固定且常用的方法,分别是model.fi ...

  7. 推荐一款功能强大、界面优美的开源SSH跨平台终端软件WindTerm

    WindTerm是一款开源免费且功能强大的终端软件,相比 MobaXterm自带中文支持.无论是在Windows.macOS还是Linux操作系统上,WindTerm都能提供出色的性能和稳定性.Win ...

  8. FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址

    ​<FFmpeg开发实战:从零基础到短视频上线>一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流.不过MediaMTX的功能 ...

  9. 动态分配内存new和delete

    #include<iostream> /* 动态分配内存用new关键字,语法:new 变量类型(初始值) C++11支持{} new int(5) ---- 申请了一个整型内存,并赋初值为 ...

  10. oeasy教您玩转vim - 42 - # 剪切进入

    ​ 剪切进入 回忆上节课内容 上次我们了解到了各种寄存器 :reg 无名寄存器"" 数字寄存器"0-"9 行内删除专用寄存器"- 指定寄存器" ...