mfc 菜单项变灰

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfc 菜单项变灰相关的知识,希望对你有一定的参考价值。

记事本,文本编辑框里没内容时,想使菜单项变灰,
我用enablemenuitem可以使菜单项变灰,不可用。
但要是输入文字后,能使菜单项可用,怎么做?
要写到哪?

首先,要想控制系统的初始化效果,需要添加Test的InitInstance()虚函数,在里面写菜单栏的置灰操作,代码如下:

CMenu* submenu = m_pMainWnd->GetMenu();
submenu->EnableMenuItem(1,MF_BYPOSITION | MF_ENABLED | MF_GRAYED);
用到了变量m_pMainWnd,这个是系统定义的窗口句柄;函数EnableMenuItem(),这里的含义是:是对菜单栏上第二个菜单项进行置灰操作,由于在系统的顶级菜单项没有ID,因此,我通过指定位置的方式进行。

在需要使菜单栏生效的地方,只要做相反的操作即可。代码如下:

CMenu* pMenu = AfxGetMainWnd()->GetMenu();

pMenu->EnableMenuItem(1,MF_BYPOSITION | MF_ENABLED );
这样就完成了菜单栏上菜单项的控制操作。
参考技术A case WM_INITMENUPOPUP:

//当菜单要弹出时,会触发这个消息。改变你的菜单状态

HMENU hSubMenu=(HMENU)wParam;
CheckMenuItem(hSubMenu,6, MF_BYCOMMAND | config.IsAutoHide ? MF_CHECKED : MF_UNCHECKED );
CheckMenuItem(hSubMenu,7, MF_BYCOMMAND | config.IsReceive ? MF_CHECKED : MF_UNCHECKED);
CheckMenuItem(hSubMenu,4, MF_BYCOMMAND | config.IsAutoWidth? MF_CHECKED : MF_UNCHECKED);


break;追问

这个函数要写到哪啊

本回答被提问者采纳

如何为菜单项Android添加行分隔符

【中文标题】如何为菜单项Android添加行分隔符【英文标题】:How to add line divider for menu item Android 【发布时间】:2016-03-04 20:27:11 【问题描述】:

我的菜单项变大了,所以我想将它们分组并制作一个分隔线来分隔每个组。 我现在该怎么办?

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
<!--group1-->
            <item
                android:id="@+id/action_addtag"
                android:title="@string/add_hashtag_string"
                app:showAsAction="never" />
            <item
                android:id="@+id/action_block_list"
                android:title="Block"
                app:showAsAction="never" />
            <item
                android:id="@+id/action_report_list"
                android:title="Report"
                app:showAsAction="never" />
<!--group2-->
            <item
                android:id="@+id/terms"
                android:title="Terms"
                app:showAsAction="never" />
            <item
                android:id="@+id/feedback"
                android:title="FeedBack"
                app:showAsAction="never" />
<!--group3-->
            <item
                android:id="@+id/action_setting"
                android:title="Setting"
                app:showAsAction="never" />
    </menu>

【问题讨论】:

这项工作为我工作***.com/questions/30625280/… 【参考方案1】:

您需要做的就是定义一个具有唯一 ID 的组,我已经检查了实现,如果组有不同的 ID,它将创建一个分隔符。

示例菜单,创建分隔符:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">

<group android:id="@+id/grp1">
    <item
        android:id="@+id/navigation_item_1"
        android:checked="true"
        android:icon="@drawable/ic_home"
        android:title="@string/navigation_item_1" />
</group>

<group android:id="@+id/grp2">
    <item
        android:id="@+id/navigation_item_2"
        android:icon="@drawable/ic_home"
        android:title="@string/navigation_item_2" />
</group>

希望这会有所帮助

更新

对于菜单项可能你可以使用这个

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <item
        android:id="@+id/action_cart"
        android:title="cart"
        android:actionLayout="@layout/cart_update_count"
        android:icon="@drawable/shape_notification"
        app:showAsAction="always"/>
</menu>

actionLayout 文件将是

 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical">

    <View
        android:id="@+id/divider"
        android:layout_
        android:layout_
        android:background="@drawable/divider"/>

    <TextView
        android:id="@android:id/text"
        android:layout_
        android:layout_
        android:background="?android:attr/selectableItemBackground"
        android:gravity="center_vertical"          
        android:textAppearance="?attr/textAppearanceListItemSmall"/>

</LinearLayout>

【讨论】:

我试过这种方式,但我没有看到分行符。似乎它不适用于菜单项,仅适用于drawerNavigator 对不起 @Vivid Vervet 先生,我检查了 android 4.0, 5.0 解决方案不起作用:( 我改成app:showAsAction="never"app:actionLayout="@layout/cart_update_count" 这在 Android 7.0 中适用于我 - 值得注意的是,如果您不为每个组设置 ID,则不会出现这些行,这让我感到困惑 在旧版本的Android上,您还需要致电MenuCompat.setGroupDividerEnabled,如下面的答案所示。【参考方案2】:

膨胀菜单时请务必致电MenuCompat.setGroupDividerEnabled(menu, true);否则组将不会被分隔符分隔

例子:

@Override
public boolean onCreateOptionsMenu(Menu menu) 
    getMenuInflater().inflate(R.menu.menu_activity_main, menu);

    MenuCompat.setGroupDividerEnabled(menu, true);

    return true;

并确保您的菜单 xml 中有不同的组,例如:

    <menu>
        <group android:id="@+id/sorting" >
            <item
                android:id="@+id/action_sorting_new_old"
                android:title="@string/action_sorting_new_old"/>

            <item
                android:id="@+id/action_sorting_a_z"
                android:title="@string/action_sorting_a_z"/>
        </group>

        <group android:id="@+id/settings">
            <item
                android:id="@+id/action_settings"
                android:title="@string/action_settings"/>
        </group>
    </menu>

【讨论】:

哈利路亚!这是互联网上看似所有其他答案的缺失关键! 1000 倍谢谢。 另外,每个组必须有一个id【参考方案3】:

老问题,但上述答案对我不起作用(我反对为单个项目添加“组”)。起作用的是添加如下样式元素:

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar"> <!--  .Light.DarkActionBar"> -->
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">#17161B</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item>//<-add this
    </style>

引用

    <style name="PopupMenuListView" parent="@style/Widget.AppCompat.ListView.DropDown">
        <item name="android:divider">#dddddd</item>
        <item name="android:dividerHeight">1dp</item>
    </style>

在同一个 res/values/styles.xml 文件中。希望对您有所帮助!

【讨论】:

以上是关于mfc 菜单项变灰的主要内容,如果未能解决你的问题,请参考以下文章

MFC中如何在菜单栏中添加按钮

如何右对齐 CMFCMenuBar 中的“帮助”菜单项

在 WinForms 中为上下文菜单动态选择菜单项的正确方法是啥?

在 react material-ui 菜单中测试嵌套菜单项

如何在不关闭菜单的情况下选择菜单项?

单击主菜单项的jQuery不会显示子子菜单