想实现一个类似菜单功能的控件,可以在任意位置创建
不知道该如何下手
谁有这方面的源码呀,发一份给我最好了
[email protected]

解决方案 »

  1.   


    void CSecProToolDlg::OnNMRclickTreeSoftpro(NMHDR *pNMHDR, LRESULT *pResult)
    {
    CString str;
    //POINT Point;
    CPoint OldPoint;
    ::GetCursorPos(&Point);
    OldPoint=Point; CMenu   menu;   
        menu.LoadMenu(IDR_MENU_SOFTPRO); 
    CMenu *submenu  =  menu.GetSubMenu(0); m_Tree_SoftPro.ScreenToClient(&Point);
    HTREEITEM   hRoot,hParent,hChild;
    hRoot=m_Tree_SoftPro.GetRootItem();
    CRect Rect;
    m_Tree_SoftPro.ScreenToClient(Rect);

    while(NULL!=hRoot)
    {
    m_Tree_SoftPro.GetItemRect(hRoot,Rect,FALSE);
    if(Point.x>=Rect.left && Point.x<=Rect.right && Point.y>=Rect.top && Point.y<=Rect.bottom)
    {
    submenu->EnableMenuItem(IDR_ADD_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED);
    submenu->EnableMenuItem(IDR_CHANGE_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED);
    submenu->EnableMenuItem(IDR_DELETE_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED);
    submenu->EnableMenuItem(IDR_ADD_SOFT,MF_BYCOMMAND|MF_ENABLED);
    submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this);
    return; }
    hParent=m_Tree_SoftPro.GetChildItem(hRoot);

    while(NULL!=hParent)
    {
    m_Tree_SoftPro.GetItemRect(hParent,Rect,FALSE);
    if(Point.x>=Rect.left && Point.x<=Rect.right && Point.y>=Rect.top && Point.y<=Rect.bottom)
    {
    submenu->EnableMenuItem(IDR_ADD_SOFT,MF_BYCOMMAND|MF_ENABLED);
    submenu->EnableMenuItem(IDR_CHANGE_SOFT,MF_BYCOMMAND|MF_ENABLED);
    submenu->EnableMenuItem(IDR_DELETE_SOFT,MF_BYCOMMAND|MF_ENABLED);
    submenu->EnableMenuItem(IDR_ADD_PROCESS,MF_BYCOMMAND|MF_ENABLED);
    submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this);
    return;
    }
    hChild=m_Tree_SoftPro.GetChildItem(hParent);

    while(NULL!=hChild)
    {
    m_Tree_SoftPro.GetItemRect(hChild,Rect,FALSE);
    if(Point.x>=Rect.left && Point.x<=Rect.right && Point.y>=Rect.top && Point.y<=Rect.bottom)
    {
    submenu->EnableMenuItem(IDR_ADD_PROCESS,MF_BYCOMMAND|MF_ENABLED);
    submenu->EnableMenuItem(IDR_CHANGE_PROCESS,MF_BYCOMMAND|MF_ENABLED);
    submenu->EnableMenuItem(IDR_DELETE_PROCESS,MF_BYCOMMAND|MF_ENABLED);
    submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this);
    return;
    }
    hChild=m_Tree_SoftPro.GetNextSiblingItem(hChild);

    } hParent=m_Tree_SoftPro.GetNextSiblingItem(hParent);
    }

    hRoot=m_Tree_SoftPro.GetNextSiblingItem(hRoot);
    }
    submenu->EnableMenuItem(IDR_ADD_SOFTTYPE,MF_BYCOMMAND|MF_ENABLED);
    submenu->TrackPopupMenu(TPM_LEFTALIGN,OldPoint.x,OldPoint.y,this);
    *pResult = 0;
    }
      

  2.   

    1.添加NM_RCLICK事件
    2.把你自己定义的菜单加载入CMenu的对象。
    3.调用TrackPopupMenu()