首页 > 解决方案 > 是否可以将单选按钮标记更改为“CheckMenuRadioItem()”留下的复选标记?

问题描述

我有一组菜单项,它们的行为必须与单选按钮的行为完全相同(一旦选择了一个,其他的就不会被标记),但要求是使用复选标记而不是单选按钮标记。有没有可能修改CheckMenuRadioItem()函数使用的标记的方法?

标签: c++winapi

解决方案


@AdrianMole 是对的。但是CheckMenuItem,在后续版本中可能会更改或不可用。相反,使用SetMenuItemInfo.

以下是如何实现此目的的示例:

        case ID_MENU_ITEM1:
            hMenu = GetMenu(hWnd);
            mii.fState = MF_CHECKED;
            SetMenuItemInfo(hMenu, ID_MENU_ITEM1, FALSE, &mii);
            mii.fState = MF_UNCHECKED;
            SetMenuItemInfo(hMenu, ID_MENU_ITEM2, FALSE, &mii);
            SetMenuItemInfo(hMenu, ID_MENU_ITEM3, FALSE, &mii);
            break;
        case ID_MENU_ITEM2:
            hMenu = GetMenu(hWnd);
            mii.fState = MF_CHECKED;
            SetMenuItemInfo(hMenu, ID_MENU_ITEM2, FALSE, &mii);
            mii.fState = MF_UNCHECKED;
            SetMenuItemInfo(hMenu, ID_MENU_ITEM1, FALSE, &mii);
            SetMenuItemInfo(hMenu, ID_MENU_ITEM3, FALSE, &mii);
            break;
        case ID_MENU_ITEM3:
            hMenu = GetMenu(hWnd);
            mii.fState = MF_CHECKED;
            SetMenuItemInfo(hMenu, ID_MENU_ITEM3, FALSE, &mii);
            mii.fState = MF_UNCHECKED;
            SetMenuItemInfo(hMenu, ID_MENU_ITEM1, FALSE, &mii);
            SetMenuItemInfo(hMenu, ID_MENU_ITEM2, FALSE, &mii);
            break;

在此处输入图像描述


推荐阅读