CListCtrl响应鼠标右键点击弹出菜单

网上这有很多这类的代码。但是我在实现的时候,GetSubMenu(0)总是为空。程序是基于对话框的,运行环境是XP+VC6.0.具体的代码如下:
C/C++ code

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;
}

作者: shaotine_wu   发布时间: 2011-06-16

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

作者: VisualEleven   发布时间: 2011-06-16

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

作者: bdmh   发布时间: 2011-06-16

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

作者: kyotrue   发布时间: 2011-06-16

引用 1 楼 visualeleven 的回复:

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

这个是成立的,刚刚调试了

作者: shaotine_wu   发布时间: 2011-06-16

引用 2 楼 bdmh 的回复:

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

结果是一样的,还是为空

作者: shaotine_wu   发布时间: 2011-06-16

引用 3 楼 kyotrue 的回复:

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

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

作者: shaotine_wu   发布时间: 2011-06-16

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);
}
}
参考。

作者: oldmtn   发布时间: 2011-06-16