zoukankan      html  css  js  c++  java
  • VC:对话框中菜单的使用(WM_INITMENUPOPUP)

    1、在对话框资源上右击,在弹出的快捷菜单中选择Properties命令,弹出对话框里的Menu下拉列表框中选择IDR_MENU1.

    2、添加响应COMMAND消息的映射函数。

    3、添加UPDATE_COMMAND_UI消息,但此时对话框不能响应这个消息。添加WM_INITMENUPOPUP消息映射,其内部代码和MFC   CFrameWnd::OnInitMenuPopup()内的代码相同。

    具体如下:

           Ctrl+W -->Classinfo -->MessageFilter下拉列表框中选择Window。返回到MessageMaps标签,添加WM_INITMENUPOPU

     消息映射。

    代码如下:

    void CDialogMenuDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)

    {

           CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);

          

           // TODO: Add your message handler code here

           //     CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);

            ASSERT(pPopupMenu != NULL);

        // Check the enabled state of various menu items.

        CCmdUI state;

        state.m_pMenu = pPopupMenu;

        ASSERT(state.m_pOther == NULL);

        ASSERT(state.m_pParentMenu == NULL);

        // Determine if menu is popup in top-level menu and set m_pOther to

        // it if so (m_pParentMenu == NULL indicates that it is secondary popup).

        HMENU hParentMenu;

        if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu)

            state.m_pParentMenu = pPopupMenu;    // Parent == child for tracking popup.

        else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL)

        {

            CWnd* pParent = this;

               // Child windows don't have menus--need to go to the top!

            if (pParent != NULL &&

               (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL)

            {

               int nIndexMax = ::GetMenuItemCount(hParentMenu);

               for (int nIndex = 0; nIndex < nIndexMax; nIndex++)

               {

                if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu)

                {

                    // When popup is found, m_pParentMenu is containing menu.

                    state.m_pParentMenu = CMenu::FromHandle(hParentMenu);

                    break;

                }

               }

            }

        }

        state.m_nIndexMax = pPopupMenu->GetMenuItemCount();

        for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;

          state.m_nIndex++)

        {

            state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);

            if (state.m_nID == 0)

               continue; // Menu separator or invalid cmd - ignore it.

            ASSERT(state.m_pOther == NULL);

            ASSERT(state.m_pMenu != NULL);

            if (state.m_nID == (UINT)-1)

            {

               // Possibly a popup menu, route to first item of that popup.

               state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);

               if (state.m_pSubMenu == NULL ||

                (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||

                state.m_nID == (UINT)-1)

               {

                continue;       // First item of popup can't be routed to.

               }

               state.DoUpdate(this, TRUE);   // Popups are never auto disabled.

            }

            else

            {

               // Normal menu item.

               // Auto enable/disable if frame window has m_bAutoMenuEnable

               // set and command is _not_ a system command.

               state.m_pSubMenu = NULL;

               state.DoUpdate(this, FALSE);

            }

            // Adjust for menu deletions and additions.

            UINT nCount = pPopupMenu->GetMenuItemCount();

            if (nCount < state.m_nIndexMax)

            {

               state.m_nIndex -= (state.m_nIndexMax - nCount);

               while (state.m_nIndex < nCount &&

                pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID)

               {

                state.m_nIndex++;

               }

            }

            state.m_nIndexMax = nCount;

        }

    }

  • 相关阅读:
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/shenchao/p/2737771.html
Copyright © 2011-2022 走看看