我在ResourceView里建了几组菜单IDR_MENU1、IDR_MENU2...
然后想右键弹出相应的菜单
开始照书上的:
  POINT pp;   
  GetCursorPos(&pp);  CMenu *pt, t;
  t.LoadMenu(IDR_MENU1);
  pt=t.GetSubMenu(0);
  ::SetForegroundWindow(tind.hWnd);
  ::TrackPopupMenu(pt->m_hMenu, 0, pp.x, pp.y, 0, m_hWnd, NULL);
  ::PostMessage(m_hWnd, WM_NULL, 0, 0);结果编译通过,一点右键就报access violation的错,
后来在网上查了查,改成:
  POINT pp;   
  GetCursorPos(&pp);  CMenu hMenu;
  hMenu.LoadMenu(IDR_MENU1);
  hMenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, pp.x, pp.y, this);还是一样的错,错误指向:
       BOOL CMenu::TrackPopupMenu(UINT nFlags, int x, int y,
     CWnd* pWnd, LPCRECT lpRect)
       {
=>    ASSERT(m_hMenu != NULL);            _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
             ......报m_hMenu的错,也不知道怎么搞的
现在只好先用CreatePopupMenu和AppendMenu自定义菜单,很郁闷,
请高手指点一下弹出做好的菜单该怎么写?谢谢!
  
  

解决方案 »

  1.   

    void CPopMenuView::OnRButtonDown(UINT nFlags, CPoint point) 
    {
    CView::OnRButtonDown(nFlags, point); CRect rc;
    GetWindowRect(&rc);
    point.x = rc.left + point.x;
    point.y = rc.top + point.y;
    CMenu* pPopMenu = new CMenu;
    pPopMenu->LoadMenu(IDR_MENU1);
    CMenu* pFileMenu = pPopMenu->GetSubMenu(0);
    pFileMenu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, 
      point.y, this);
    delete pPopMenu;
    }
      

  2.   

    CPoint pt;
    GetCursorPos(&pt);
    CMenu menu;
    VERIFY( menu.LoadMenu( IDR_RIGHTMENU ) );
    CMenu* popup = menu.GetSubMenu(0);
    ASSERT( popup != NULL );
    popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, this );
      

  3.   

    邪了门了,livedeal和yzhouen的方法我都试了,还是报一样的错:Unhandled Exception in PopMenu.exe(MFC42D.DLL); ....;Access Violation
    错误指向WINCORE.CPP :
           ...
           BOOL CMenu::TrackPopupMenu(UINT nFlags, int x, int y,
         CWnd* pWnd, LPCRECT lpRect)
           {
    =>    ASSERT(m_hMenu != NULL);            _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
           ...不会是我的vc有问题吧
      

  4.   

    真是奇怪,我在...\MFC\SRC\WINCORE.CPP中把报错的那一行 ASSERT(m_hMenu != NULL);
    敲了回车放到了下一行,这一行什么都没有,结果还是有个错误标志指向这个什么都没有的行
    ,晕
      

  5.   

    啊,高手!我把第一个菜单项点上popup属性,就弹出来了!原来是这样,它就弹出ResourceView菜单里的横排里的第一组,并不是弹出那一整排,我原来第一个是非popup属性,可能m_hMenu里就什么都没有了。感谢感谢!