我使用TrackPopupMenu(...)弹出菜单,响应“WM_NCRBUTTONDOWN”消息。 
但当单击右键时会在鼠标的位置出现一个类似于按钮的小东西,当鼠标移动到上面时才显示菜单,而且菜单的位置也不在鼠标的位置,而是在那个小按钮右边大搞50像素的位置。 
代码如下: 
case WM_NCRBUTTONDOWN: 
  //GetCursorPos(&ptMousePos); 
  ptMousePos.x = LOWORD(lParam); 
  ptMousePos.y = HIWORD(lParam); 
  //ClientToScreen(hWnd, &ptMousePos); 
  //加上这句的位置也没显示对 
  hMenu = LoadMenu(g_ControlPanel.GethInstance(), MAKEINTRESOURCE(IDR_POPMENU)); 
  TrackPopupMenu(hMenu,TPM_RIGHTBUTTON,ptMousePos.x,ptMousePos.y,NULL,hWnd,&rcWindow); 
  return 0; 请问怎样才能让菜单正确显示:鼠标右键单击时菜单显示在鼠标的位置,不出现那个按钮一样的东西

解决方案 »

  1.   

    要获得SubMenu  hMenu = LoadMenu(g_ControlPanel.GethInstance(), MAKEINTRESOURCE(IDR_POPMENU));
    HMENU hsMenu = GetSubMenu(hMenu, 0);
      TrackPopupMenu(hsMenu,TPM_RIGHTBUTTON,ptMousePos.x,ptMousePos.y,NULL,hWnd,&rcWindow); 
      

  2.   

    这样试验一下
    TrackPopupMenu(hMenu,TPM_LEFTALIGN |TPM_LEFTBUTTON,ptMousePos.x,ptMousePos.y,NULL,hWnd,&rcWindow); 
      

  3.   

    hMenu = LoadMenu(g_ControlPanel.GethInstance(), MAKEINTRESOURCE(IDR_POPMENU)); 
    HMENU hsMenu = GetSubMenu(hMenu, 0); 
      TrackPopupMenu(hsMenu,TPM_LEFTALIGN | TPM_RIGHTBUTTON,ptMousePos.x,ptMousePos.y,NULL,hWnd,&rcWindow); 
      

  4.   

    CMenu menu;
    VERIFY(menu.LoadMenu(CG_IDR_POPUP_MY_**));
    CMenu* pPopup=menu.GetSubMenu(0);
    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,piont.x,point.y,this);
      

  5.   

    RECT rect;     
    GetWindowRect(&rect);
    CMenu menu;
    menu.LoadMenu(IDR_MENU1); 
    CMenu *ptrMenu;
    ptrMenu = menu.GetSubMenu(0);   
    ptrMenu->TrackPopupMenu
    (   
    TPM_LEFTALIGN|TPM_RIGHTBUTTON,   
    point.x + rect.left,   
    point.y + rect.top,  
    this
    ); 前面已经是很具体,也可以试试这个
      

  6.   

    RECT rect;     
    GetWindowRect(&rect);
    CMenu menu;
    menu.LoadMenu(IDR_MENU1); 
    CMenu *ptrMenu;
    ptrMenu = menu.GetSubMenu(0);   
    ptrMenu->TrackPopupMenu
    (   
    TPM_LEFTALIGN|TPM_RIGHTBUTTON,   
    point.x + rect.left,   
    point.y + rect.top,  
    this
    ); 前面已经是很具体,也可以试试这个
      

  7.   

    RECT rect;     
    GetWindowRect(&rect);
    CMenu menu;
    menu.LoadMenu(IDR_MENU1); 
    CMenu *ptrMenu;
    ptrMenu = menu.GetSubMenu(0);   
    ptrMenu->TrackPopupMenu
    (   
    TPM_LEFTALIGN|TPM_RIGHTBUTTON,   
    point.x + rect.left,   
    point.y + rect.top,  
    this
    ); 前面已经是很具体,也可以试试这个
      

  8.   

    要ScreenToClient还是ClientToScreen,我记不清了,做一下坐标系统的转换,你自己试试。
      

  9.   

    试了一个下午,原来是getsubmenu