error C2361: initialization of 'hmenu' is skipped by 'default' label
程序为:            
{
CMenu m_menu;
POINT pt;
GetCursorPos(&pt);
m_menu.CreatePopupMenu();
m_menu.AppendMenu(MF_STRING|MF_ENABLED,IDM_CLOSE,"关闭");
m_menu.TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this);
HMENU hmenu=m_menu.Detach();
m_menu.DestroyMenu();
}请问一下各位大虾上面的错误是什么意思啊?
是程序有问题吗?如何去除该问题啊?

解决方案 »

  1.   

    HMENU hmenu=m_menu.Detach();
    m_menu.DestroyMenu(); 将HMENU hmenu提到wuitch {} 外面声明
      

  2.   

    将HMENU hmenu提到switch {} 外面声明,写错sorry
      

  3.   


    HMENU hmenu=m_menu.Detach(); 
    拆成
    HMENU hmenu=NULL; 
    hmenu=m_menu.Detach(); 试试
      

  4.   

    刚用你的代码测试了一下 没有出现error!
    void CTestDlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    CMenu m_menu; 
    POINT pt; 
    GetCursorPos(&pt); 
    m_menu.CreatePopupMenu(); 
    m_menu.AppendMenu(MF_STRING|MF_ENABLED,22222,L"关闭"); 
    m_menu.TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this); 
    HMENU hmenu=m_menu.Detach(); 
    m_menu.DestroyMenu(); 
    }
      

  5.   

    按照楼上们的说法我把hmenu放在了switch的外边提示变成了:
    initialization of 'menu' is skipped by 'default' label
    当把case WM_RBUTTONDOWN:处的代码放到一个大括号中变可编译通过,但菜单显示为灰色,是否跟这边的代码也有关系啊?
    HMENU m_hmenu;
    switch(uMouseMsg)
    {
    case WM_LBUTTONDBLCLK:
    this->ShowWindow(SW_SHOWNORMAL);//显示程序窗口
    AfxGetApp()->m_pMainWnd->SetForegroundWindow();
    break;
    case WM_RBUTTONDOWN://popup a menu about this porg
    CMenu menu;
    POINT pt;
    GetCursorPos(&pt);
    menu.CreatePopupMenu();
    menu.AppendMenu(MF_STRING|MF_ENABLED,IDM_CLOSE,"关闭");
    menu.AppendMenu(MF_STRING|MF_ENABLED,IDM_SHOW,"显示");
    menu.EnableMenuItem(IDM_CLOSE, MF_ENABLED);
    menu.TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this);
    m_hmenu=menu.Detach();
    menu.DestroyMenu();
    break;