zoukankan      html  css  js  c++  java
  • 为树形控件添加弹出式菜单,并跟踪所选择的项

    [cpp] view plaincopy
     
    1. <span style="font-size:24px;color:#ff0000;">为树形控件添加弹出式菜单,并跟踪所选择的项</span>  
    [cpp] view plaincopy
     
    1. 动态弹出式菜单  
    [cpp] view plaincopy
     
    1.  //获取当前右键的位置  
    2. CPoint pt;     
    3. GetCursorPos(&pt);     
    4. m_tree.ScreenToClient(&pt);  
    5.       
    6. //判断右键的位置处是否是树形控件的一个节点  
    7. //若有,则弹出右键菜单  
    8. HTREEITEM   hItem   =   m_tree.HitTest(pt);  
    9. if(m_tree.GetParentItem(m_tree.GetParentItem(hItem))!=NULL&&m_tree.GetChildItem(hItem)!=NULL)  
    10.    bShouldPop=TRUE;  
    11. if(hItem != NULL && bShouldPop)  
    12. {  
    13.    m_tree.SelectItem(hItem);  
    14.   
    15. //弹出菜单的位置,为后面的 TrackPopupMenu() 使用  
    16. GetCursorPos(&pt);  
    17.   
    18. CMenu popupmenu;  
    19. //生成一个弹出菜单  
    20. popupmenu.CreatePopupMenu();  
    21. ASSERT(popupmenu!=NULL);  
    22.   
    23. //添加菜单项  
    24. popupmenu.AppendMenu(MF_STRING|MF_ENABLED,IDM_ITEM_SHOW,_T("show"));  
    25. popupmenu.AppendMenu(MF_SEPARATOR);  
    26. popupmenu.AppendMenu(MF_STRING|MF_ENABLED,IDM_ITEM_HIDE,_T("hide"));  
    27. //弹出  
    28. int nCmd=(int)popupmenu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,  
    29.    pt.x,pt.y,this);  
    30.    }  
    31.   
    32. 也可以用已有的菜单资源弹出一个菜单的子项  
    [cpp] view plaincopy
     
    1. void CLeaveDlg::OnRclickTree(NMHDR* pNMHDR, LRESULT* pResult)   
    2. {  
    3.     // TODO: Add your control notification handler code here  
    4.     CMenu menu;  
    5.     menu.LoadMenu(IDR_MENU_SHOW);  
    [cpp] view plaincopy
     
    1. CBitmap bitmap; //为菜单子项添加图标  
    2. bitmap.LoadBitmap(IDB_BITMAP_BIG);  
    3.   
    4. deviceTreeMenu.SetMenuItemBitmaps(IDC_MENU_DEVICE_RENAME,MF_BYCOMMAND/*|MF_BYPOSITION*/,  
    5. &bitmap,&bitmap);   
    [cpp] view plaincopy
     
    1.     //获取当前右键的位置  
    2.     CPoint pt;  
    3.     GetCursorPos(&pt);  
    4.     m_tree.ScreenToClient(&pt);  
    5.     HTREEITEM hSelTree = m_tree.HitTest(pt);  
    6.     if ( hSelTree != NULL && m_tree.GetParentItem(hSelTree) != NULL )  
    7.     {  
    8.         m_tree.SelectItem(hSelTree);  
    9.         m_tree.ClientToScreen(&pt);  
    10.         menu.GetSubMenu(1)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this);  
    11.     }  
    12.     *pResult = 0;  
    13. }  
    [cpp] view plaincopy
     
    1.   


     动态创建菜单步骤:

    1创建一个基于对话框的应用程序
    2在对话框的头文件中声明一个CMenu类对象m_Menu;
    3打开Resource.h,在此文件中定义命令ID。代码为:#define ID_MENUCAT 1001
    4在对话框的OnInitDialog方法中创建菜单。代码如下:
    m_Menu.CreateMenu(); //创建菜单窗口
    CMenu m_PopMenu; //定义菜单类对象
    m_PopMenu.CreatePopupMenu(); //创建弹出菜单窗口
    m_Menu.AppendMenu(MF_POPUP,(UINT)m_PopMenu.m_hMenu,"动物");//插入菜单
    m_PopMenu.AppendMenu(MF_STRING,ID_MENUCAT,"猫"); //插入子菜单
    m_PopMenu.Detach(); //分离菜单句柄
    SetMenu(&m_Menu);//菜单与窗口关联
    5在对话框的头文件中声明菜单的消息处理函数,代码为 afx_msg void OnMenucat();
    6在对话框的源文件中添加消息映射宏,将命令ID关联到消息处理函数中。代码如下:
      ON_COMMAND(ID_MENUCAT, OnMenucat) //关联命令ID和消息处理函数


    7最后一步,在对话框的源文件中添加消息处理函数的实现代码
    void CCreateMenuDlg::OnMenucat()
    {
    MessageBox("猫菜单被按下");
    }

  • 相关阅读:
    html+php超大视频上传功能
    html+php超大视频上传教程
    html+php超大视频上传方案
    html+php超大视频上传技术
    html+php超大视频上传实例解析
    html+php超大视频上传示例
    html+php超大视频上传实例
    矩阵求导
    概率密度
    概率分布函数
  • 原文地址:https://www.cnblogs.com/lidabo/p/3701758.html
Copyright © 2011-2022 走看看