首页 > 技术文章 > 2.菜单

zuoyou151 2018-11-19 19:20 原文

菜单:

       下拉式菜单:主菜单栏,子菜单栏,子菜单栏中的菜单项和分割条。

        弹出式菜单:一般可通过单击鼠标右箭等显示,只显示子菜单,不显示主菜单。

热键与快捷键:

CMenu类:  

         几个主要的成员函数:

         BOOL LoadMenu(UINT nIDResource);

         加载菜单资源,并将其附加到CMenu对象上,参数nIDResource指定了要加载的

         菜单资源的ID。加载成功返回TRUE,否则返回FALSE。

         BOOL DeleteMenu(UINT nPosition,UINT nFlags);

         在菜单中删除一个菜单项,参数nPosition指定要删除的菜单项,参数nFlags来解释

         nPosition的意义:为MF_BYCOMMAND时说明nPositio表示菜单ID,为MF_BYPOSITION

         表示菜单的位置,第一个菜单的位置为0。

        BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect=0);

       用来在指定位置显示一个浮动的弹出式菜单,参数nFlags指定屏幕坐标和鼠标位置的

       标志,可以为如下取值:

 

TPM_GETTERALIGN 菜单在水平方向上相对于参数x指定的坐标居中显示
TPM_LEFTALIGN 菜单的左侧与参数x指定的坐标值平齐
TPM_RIGHTALIGN 菜单的右侧与参数值x指定的坐标值平齐
TPM_BOTTOMALIGN 菜单的底部与参数y指定的坐标值对齐
TPM_TOPALIGN 菜单项的顶部与参数y指定的坐标值对齐
TPM_VCENTERALIGN 菜单在垂直方向上相对于参数y指定的坐标值居中显示

          UINT CheckMenuItem(UINT nIDCheckItem,UINT nCheck);

          在弹出菜单中为菜单增加选中标记或移除选中标记。nIDCheckItem,指定要选中或移除的菜单项。

          参数nCheck指定菜单项的选中状态和如何根据nIDCheckItem确定菜单项的位置,

MF_BYCOMMAND 为默认值。说明参数nIDCheckItem表示菜单项的ID
MF_BYPOSITION 说明参数nIDCheckItem表示菜单项的位置,第一个菜单项的位置是0
MF_CHECKED 为菜单项添加选中标记
MF_UNCHECKED

为菜单项移除选中标记

            该参数返回菜单项之前的状态,MF_CHECKED或MF_UNCHECKED如果菜单项不存在则返回0或0xFFFFFFFF。

            UINT EnableMenuItem(UINT nIDEnableItem,UINT nEnable);

             激活,禁用菜单或使其变灰,参数nEnable选项

MF_BYCOMMAND 为默认值。说明参数nIDCheckItem表示菜单项的ID
MF_BYPOSITION 说明参数nIDCheckItem表示菜单项的位置,第一个菜单项的位置是0
MF_DISABLED 禁用菜单项,使其不能被选择但不变灰
MF_ENABLED 激活菜单项,使其能够被选择并由变灰状态恢复
MF_GRAYED 禁用菜单项,使其不能被选择并变灰

              CMenu* GetSubMenu(int nPos)const;

             获取弹出菜单的CMenu对象,nPos指定弹出菜单在菜单中的位置,不能使用ID。返回值是CMenu对象的指针

             该CMenu对象的m_hMenu成员为由nPos指定的弹出菜单的句柄,如果不存在这样的CMenu对象则返回NULL,

             然后创建一个临时弹出菜单。

菜单消息:

        菜单主要能发送两种消息:COMMAND消息和UPDATE_COMMAND_UI消息

        COMMAND消息:在菜单项被点击时发送该消息。

        UPDATE_COMMAND_UI消息:用来维护菜单项的各项状态,包括,激活,禁用,变灰,选中,未选中等。

                    在下拉菜单每次打开的时候,所有菜单项的消息都会被发出。如果所属类中为菜单项的该消息添加了

                    处理函数,则执行相应函数为更新菜单状态,如果菜单项没有发送消息处理函数,也没有COMMAND

                    消息的处理函数,它就会变灰。

 

推荐阅读