0

デスクトップ アプリケーション内にメニュー項目検索を実装しようとしています。ユーザーが検索ボックス内に任意のメニュー項目文字列を入力して、検索結果から直接そのメニュー項目を呼び出せるようにしたいと考えています。これは、Mac 内のメニュー検索に似ています。アプリケーションのメニュー項目のリストを取得するにはどうすればよいですか?

4

1 に答える 1

2

必要に応じて変更できるコード スニペットを次に示します。

void InterateMenu(HMENU hMenu)
{   MENUITEMINFO mii;
    int i, nCount = GetMenuItemCount(hMenu);

    for (i = 0; i < nCount; i++)
    {   memset (&mii, 0, sizeof(mii));
        mii.cbSize = sizeof(mii);
        mii.fMask = MIIM_SUBMENU | MIIM_TYPE | MIIM_ID; // | MIIM_STATE
        if (!GetMenuItemInfo(hMenu, i, TRUE, &mii))
            continue;
        if ((mii.fType & MFT_STRING) != 0 && mii.cch > 0)
        {   mii.cch++;
            TCHAR *pString = (TCHAR *) malloc(mii.cch  * sizeof(TCHAR));
            if (pString != NULL)
            {   if (!GetMenuItemInfo(hMenu, i, TRUE, &mii))
                {   free(pString);
                    continue;
                }
                TRACE(_T("ID = %u, string = %s\n"), mii.wID, pString);
                free(pString);
            }
        }
        if (mii.hSubMenu != NULL)
            InterateMenu(mii.hSubMenu); // ** recursive **
    }
}

メイン メニュー ハンドルを使用して関数を呼び出します。

于 2013-09-03T11:07:51.607 に答える