可以在PreTranslateMessage里面截获鼠标消息,再判断控件是不是焦点控件

解决方案 »

  1.   

    可以在窗口的右键事件中判断鼠标点击的点,是否在Mschart的控件范围之内,如果在,就弹出菜单,如果不在,则不弹出。
    PtInRect(
       POINT point 
    ) 是判断点是否在矩形中。
    CRect rect;
    m_ctMsChart.GetClientRect(&rect);//假如:m_ctMsChart是Mschart的名称。
    这个是得到rect的范围的。
    rect.PtInRect(point)判断是否为真,如果为真,弹出。
      

  2.   

    哪位帮我看一下,这么编为什么不弹出来.我在对话框的三个Mschart控件上点右键时都能弹出右键菜单
    void CdblView::OnRButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CPoint pt;
            GetCursorPos(&pt);//获取光标点击的位置  
    //pt=MAKEPOINTS();
    ScreenToClient(&pt);  CRect   Arect,Prect,Vrect; 
        m_chartA.GetClientRect(&Arect);//获取MSCHART1(m_chartA/p/v是关联的控件类型成员变量)控件的矩形区域
    m_chartP.GetClientRect(&Prect);
    m_chartV.GetClientRect(&Vrect);
    if(Arect.PtInRect(pt)|Prect.PtInRect(pt)|Vrect.PtInRect(pt))
    {
    CMenu menu;//创建加载一个菜单资源
    menu.LoadMenu(IDR_MENU1);
    CMenu *pPopup=menu.GetSubMenu(0); 
    //ClintToScreen(&pt);
    pPopup->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,GetParent());   //弹出右键菜单
    CFormView::OnRButtonDown(nFlags, point);
    }
    }
      

  3.   

    1)m_chartA、m_chartP、m_chartV是同一个东西吗?
    如果是,则使用一个就可以
    2)void   CdblView::OnRButtonDown(UINT   nFlags,   CPoint   point) 
    这个point,就是鼠标点击的位置。
      

  4.   

    if(Arect.PtInRect(pt) ¦Prect.PtInRect(pt) ¦Vrect.PtInRect(pt)) 
    改成if (Arect.PtInRect(point)||Prect.PtInRect(point)||Vrect.PtInRect(point)) 
    -------废代码---------
    CPoint   pt; 
    GetCursorPos(&pt);//获取光标点击的位置     
    //pt=MAKEPOINTS(); 
    ScreenToClient(&pt);   
      

  5.   

    m_chartA、m_chartP、m_chartV是对话框上三个不同ID的MSCHART控件关联的控件变量.TO:LIUXIUK 我试了一下, IF();是我改过来后在对话框上能弹出来,
               不过感觉好像是整个对话框,而不是只能在这三个控件上弹出来的
                 我是想按着shanhqk说的来实现的.
                
    把CPoint       pt;   
    GetCursorPos(&pt);//获取光标点击的位置           
    //pt=MAKEPOINTS();   
    ScreenToClient(&pt);  
    注释后,只能在一个地方弹出来,不过不是那三个件,好像还是有点儿问题!
      

  6.   

    那是你的rect没搞对吧..?
    本身你就是在鼠标右键相应函数里处理的..
    就不需要再做光标处理了..!-----
    你看看定义的rect对不对?
      

  7.   

    看了你的代码你rect 定义的就是整个客户区
    所以你点鼠标的时候//不过感觉好像是整个对话框,而不是只能在这三个控件上弹出来的