本帖最后由 xyzhaopeng 于 2010-06-02 13:51:58 编辑

解决方案 »

  1.   

    对了,如果是在对话框中用这个控件的话,右键菜单不是灰色的;而在CFormView中用这个控件的话,右键菜单是灰色的,不知道为什么?
      

  2.   

    灰色就不清楚了,至于响应的问题就在 pWndPopupOwner 的类中添加响应函数就可以了,也可以用 TPM_RETURNCMD 来根据 TrackPopupMenu 的返回值作处理。
      

  3.   

    这样在使用CMyEdit类的时候,右键单CMyEdit的时候会弹出我自己定义的右键菜单,可是都是灰色的,不知道怎么办?
    还有个大问题,这个右键菜单的事件函数应该在哪里写呢?
    --------------------------------------------------------------------------
    用VS2008试了一下,不是灰色的,右键菜单的响应事件直接在你的父窗口类中添加即可
      

  4.   

    是的,我都没有加消息响应函数,但是在对话框中用这个控件的话,右键出来的快捷菜单不是灰色的;而在CFormView中右键出来的快捷菜单则是灰色的,很奇怪。
    其实灰色不灰色主要是兴趣问题,对程序影响不大,就是个人感觉比较奇怪。主要是消息响应,我也知道在父类窗口中添加。可是问题是,比如我要实现“复制”功能,我在父类窗口中要知道是在哪个控件上点击了右键;比如我要实现“粘贴”功能,我要知道在哪个控件上点击了右键;因为在父类窗口中我使用了不止一个这样的控件。这个才是我主要的问题。
      

  5.   

    首先,窗口框架和对话框框架对菜单的支持是不一样的,具体差别在于是否响应WM_INITMENUPOPUP消息
    然后,你既然是重载Edit那就应该把菜单消息连到你的CMyEdit里
      

  6.   

    主要是消息响应,我也知道在父类窗口中添加。可是问题是,比如我要实现“复制”功能,我在父类窗口中要知道是在哪个控件上点击了右键;比如我要实现“粘贴”功能,我要知道在哪个控件上点击了右键;因为在父类窗口中我使用了不止一个这样的控件。这个才是我主要的问题。
    ==================
    你是从CEdit类中继承一个类的,消息响应还是应该加在自己的类中才更加合理。
      

  7.   

    问题已经解决了,谢谢大家的回复。
    我在我的派生类中://自定义右键菜单
    void CMyEdit::OnContextMenu(CWnd* pWnd, CPoint point)
    {
    if (point.x == -1 && point.y == -1)
    {
    //keystroke invocation
    CRect rect;
    GetClientRect(rect);
    ClientToScreen(rect);

    point = rect.TopLeft();
    point.Offset(5, 5);
    }

    CMenu menu;
    VERIFY(menu.LoadMenu(IDR_VOL_VALUE));

    CMenu* pPopup = menu.GetSubMenu(0);
    ASSERT(pPopup != NULL);

    CTestView *pView = (CTestView*)(GetParent());
    pView->m_pCurEdit = this;

    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
    pView);
    }
    在它的父窗口(CTestView)中定义了一个CMyEdit的指针CEditBox *m_pCurEdit;用来保存当然右键点击的是哪个控件,在控件的OnContextMenu()函数中把this指针付给其父控件的m_pCurEdit变量,这样其父窗口就得到了点击的控件。右键响应函数放在它的父窗口中,响应函数类似如下://电压等幅值
    void CTestView::OnVolEqual() 
    {
    // TODO: Add your command handler code here
    if(m_pCurEdit == &m_valueUa)
    {
    AfxMessageBox("Ua");
    }
    if(m_pCurEdit == &m_valueUb)
    {
    AfxMessageBox("Ub");
    }
    if(m_pCurEdit == &m_valueUc)
    {
    AfxMessageBox("Uc");
    } m_pCurEdit = NULL;
    }
      

  8.   

    在它的父窗口(CTestView)中定义了一个CMyEdit的指针CEditBox *m_pCurEdit;用来保存当然右键点击的是哪个控件,在控件的OnContextMenu()函数中把this指针付给其父控件的m_pCurEdit变量,这样其父窗口就得到了点击的控件。
    CMyEdit的指针,在控件的OnContextMenu()函数中把this指针付给其父控件的m_pCurEdit变量这个是怎么赋值呢?
      

  9.   

    定义了一个CMyEdit派生类之后,要怎么使用它才能让EDIT有修改过的右键菜单,初学者,多多帮助