<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    為樹形控件添加彈出式菜單,并跟蹤所選擇的項

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接 [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("貓菜單被按下");
    }

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全