1。我在用appwizard自动生成了一个单文档程序,怎么显示一个右键弹出菜单啊,我试了一下,可是显示不出来,只显示出来我自己建立的菜单的边缘。程序如下:
void CMfcSDocView::OnRButtonDown(UINT nFlags, CPoint point) 
{
CMenu menu;
menu.LoadMenu(IDR_MENU1);
CPoint pt;
GetCursorPos(&pt);
menu.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
menu.DestroyMenu();

CView::OnRButtonDown(nFlags, point);
}2。在上面这个命令处理函数中,point这个参数为什么是针对全屏幕的?如果屏幕不是全屏的,出现的位置就不对,只有自己得到当前的光标的位置,这样这个函数这个参数是不是就失去了它本身的意义?

解决方案 »

  1.   

    try this:CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    CPoint pt;
    GetCursorPos(&pt);
    menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
    menu.DestroyMenu();

      

  2.   

    响应WM_CONTEXTMENU消息:
    void youview::OnContextMenu(CWnd* pWnd, CPoint point) 
    {
    CMenu pMenu1;
    pMenu1.LoadMenu(IDR_MENU1); CMenu* pMenu = pMenu1.GetSubMenu(0);
    //pMenu->AppendMenu(MF_POPUP,0,"aaa");
    pMenu->TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this);
    }
      

  3.   

    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    CPoint pt;
    GetCursorPos(&pt);
    menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
    menu.DestroyMenu();可以的...绝对没问题...看看你的资源里有没有ID为IDR_MENU1的菜单
      

  4.   


    2。在上面这个命令处理函数中,point这个参数为什么是针对全屏幕的?如果屏幕不是全屏的,出现的位置就不对,只有自己得到当前的光标的位置,这样这个函数这个参数是不是就失去了它本身的意义?这个问题可用 ClientToScreen(&point);来解决
    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    ClientToScreen(&point);
    menu.GetSubMenu(0)->TrackPopupMenu(TPM_RIGHTBUTTON, point.x, point.y, this);
    menu.DestroyMenu();
    CView::OnRButtonDown(nFlags, point);
      

  5.   

    small_wei(small) 谢谢你,可以的!
    我再请问一个问题,那上下文菜单应该设置成什么形式,我试了一下,好像第一个弹出菜单的文本没有办法显示,只是显示了这个弹出菜单下面的弹出项而已。我想应该有标准的弹出菜单的设置方法的,请问是什么?是不是弹出菜单不应该写文本啊,只要下面弹出项就可以了,谢谢!
      

  6.   

    kingcom_xu(我的刀是杀不了人的) ,不好意思,你的也是对的,不过好像处理上下文菜单就是响应WM_CONTEXTMENU消息的吧,那用右键的消息是不是有点不大专业啊?
      

  7.   

    做成这种弹出菜单
    ---------|
    文件->,,,|
    编辑->,,,|
    帮助->...|
    ---------|