如何让控件继承的类如CListCtrl控件实现响应右键菜单的函数

解决方案 »

  1.   

    比如在对话框里列表控件:
    1.加个菜单资源
    2.在建立类向导里,找到控件的列表ID,为其添加右键消息
    3.在消息响应里写
    如:
         POINT   _point;   
        ::GetCursorPos(&_point);   
        CMenu   menu;   
      menu.CreatePopupMenu(); 
      menu.LoadMenu(IDR_ListCtrlMenu);//TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON
      //menu.AppendMenu(MF_STRING,ID_ListCtrlMenu,"");   
       menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN   |TPM_RIGHTBUTTON|TPM_RIGHTBUTTON,   _point.x,     
       _point.y,   this);
    4.再为菜单添加响应函数即可.....
      

  2.   

    .h里面追加

    afx_msg void OnRButtonUp(UINT nFlags,CPoint point);

    .cpp里面追加
    ON_WM_RBUTTONUP( )

    void CComponent::OnRButtonDown(UINT nFlags, CPoint point) 
    {CMenu menu;
    menu.CreatePopupMenu();
    POINT cPs;
    ::GetCursorPos(&cPs);

    UINT uCut = MF_ENABLED;
    UINT uCopy = MF_ENABLED;
    UINT uPaste = MF_ENABLED;
    UINT uInsert = MF_ENABLED; DWORD dw = GetSel();
    int nHi  = HIWORD(dw); 
    int nLow = LOWORD(dw);
    if(nHi == nLow)
    {
    uCut = MF_GRAYED;
    uCopy = MF_GRAYED;
    }

    if(!::IsClipboardFormatAvailable(CF_TEXT))
    {
    uPaste = MF_GRAYED;
    uInsert = MF_GRAYED;
    }
    menu.AppendMenu(MF_ENABLED,(UINT)QTEDIT_EDIT_MENU_SEARCH,QTEDIT_EDIT_MENU_STR_SEARCH);
    menu.AppendMenu(MF_SEPARATOR);
    menu.AppendMenu(uCut, (UINT)QTEDIT_EDIT_MENU_CUT, QTEDIT_EDIT_MENU_STR_CUT);
    menu.AppendMenu(uCopy, (UINT)QTEDIT_EDIT_MENU_COPY, QTEDIT_EDIT_MENU_STR_COPY);
    menu.AppendMenu(uPaste, (UINT)QTEDIT_EDIT_MENU_PASTE, QTEDIT_EDIT_MENU_STR_PASTE);
    menu.AppendMenu(uInsert,(UINT)QTEDIT_EDIT_MENU_PASTEOK,QTEDIT_EDIT_MENU_STR_PASTEOK);
    menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, cPs.x,cPs.y,this, rect);
    SetCapture();
    CListCtrl::OnRButtonDown(nFlags, point);}
    ...
    里面大写的玩意市常量