zoukankan      html  css  js  c++  java
  • Win32 sdk 下树形控件响应鼠标单击与双击,获得选中项的名称

    //窗口过程函数

    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中测试通过

    签名:GreenLeaf1976
  • 相关阅读:
    videojs播放直播源rtmp时画面在左上角解决方案
    常用git操作命令
    vue使用vue-video-player在直播中的应用
    element-ui隐藏组件scrollbar的使用
    Array.reduce()学习
    阿里云物联网套件(iot)设备间通信(M2M)在web端的实践
    前端axios下载excel(二进制)
    nodejs连接阿里云物联网套件(mqtt)
    base64格式图片转换为FormData对象进行上传
    NodeJS之微信开发
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/13676559.html
Copyright © 2011-2022 走看看