网上这有很多这类的代码。但是我在实现的时候,GetSubMenu(0)总是为空。程序是基于对话框的,运行环境是XP+VC6.0.具体的代码如下:void CProcess_InfromationDlg::OnRclickTotalInfo(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );

CMenu menu;
VERIFY( menu.LoadMenu( IDR_MENU1) ); //加载菜单正确的。
               /*
                菜单的格式是
                |------------|
                |   打开     |view as popup
                |------------|
                |   关闭     |view as popup
                |------------|
               */
CMenu* popup = menu.GetSubMenu(0);  //这里总是为空。为什么??????
ASSERT( popup != NULL );
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );
           } 
*pResult = 0;
}

解决方案 »

  1.   

    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    ASSERT(menu.GetSafeHmenu()); ?? 这个成立吗?
      

  2.   

    你把CMenu menu;做成全局的把,现在是局部的,可能被释放了
      

  3.   

    你资源文件的IDR_MENU1里面有子菜单项么?
      

  4.   

     菜单IDR_MENU1的子菜单为下面格式:
                    |------------|
                    |   打开     |效果是:view as popup  ID为ID_MENU_OPEN
                    |------------|
                    |   关闭     |效果是:view as popup   ID为ID_MENU_CLOSE
                    |------------| 
      

  5.   

    void CXXXDlg::OnNMRclickTasklist(NMHDR *pNMHDR, LRESULT *pResult)
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    if (pNMListView->iItem == -1)
    {
    DWORD dwPos = GetMessagePos();
    CPoint point(LOWORD(dwPos), HIWORD(dwPos)); CMenu menu;
    VERIFY(menu.LoadMenu(IDR_TASK_BLANK));
    CMenu* popup = menu.GetSubMenu(0);
    ASSERT(popup != NULL);
    popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
    }
    }
    参考。
      

  6.   

    弱弱的问下,pNMListView->iItem == -1应该是pNMListView->iItem != -1吧,
    还有除了这点,貌似你的代码和我的没什么区别。
      

  7.   

    IDR_MENU1类型为popup就可以了!子菜单为何又设置为popup?以下设置即可!
      |------------|
      | 打开 |效果是:ID为ID_MENU_OPEN
      |------------|
      | 关闭 |效果是:ID为ID_MENU_CLOSE
      |------------|