在对话框程序中动态的显示出菜单,可是窗口内的控件都被挤出了窗口,怎么让菜单浮动在控件上面而不把窗口内的东西挤出去?

解决方案 »

  1.   


    void CTestDlg::OnShowHideMenu() 
    {
    RECT rcClient1, rcClient2, rcWnd; GetClientRect(&rcClient1); if(GetMenu())
    {
    SetMenu(NULL);
    }
    else
    {
    ::SetMenu(m_hWnd, m_hMenu); // WM_INITDIALOG 中获取
    } GetClientRect(&rcClient2);
    GetWindowRect(&rcWnd); if(rcClient1.bottom != rcClient2.bottom)
    {
    SetWindowPos(NULL, 0, 0, rcWnd.right-rcWnd.left, rcWnd.bottom-rcWnd.top-rcClient2.bottom+rcClient1.bottom,
    SWP_NOZORDER | SWP_NOMOVE | SWP_FRAMECHANGED);
    }
    else
    {
    RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_FRAME);
    }
    }
      

  2.   

    ::SetMenu(m_hWnd, m_hMenu); // WM_INITDIALOG 中获取
    两个变量保存的是什么?
      

  3.   

    m_hWnd 对话框句柄.CDialog类的一个公共成员.
    m_hMenu 菜单句柄.