让对话框中的菜单变灰(根据可用性而显示)

// 设定可用性(当你打开下拉菜单时便会激发UPDATE _COMMAND_UI消息,映射如下函数:
void  C *** Dlg::OnUpdateMenuLogin(CCmdUI *  pCmdUI) 
{
    
//  TODO: Add your command update UI handler code here
    pCmdUI -> Enable(mMenuActive  &   0x01 );
}
// 手动添加下面函数到你的主DIALOG里
void  C *** Dlg::OnInitMenuPopup(CMenu *  pPopupMenu, UINT nIndex, BOOL bSysMenu) 
{
    
if  ( ! bSysMenu)
    {
        ASSERT(pPopupMenu 
!=  NULL);
        
        
//  check the enabled state of various menu items
        CCmdUI state;        
        state.m_pMenu 
=  pPopupMenu;
        ASSERT(state.m_pOther 
==  NULL);
        
        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 , FALSE);   //  popups are never auto disabled
            }
            
else
            {
                
//  normal menu item
                
//  Auto enable/disable if command is _not_ a system command
                state.m_pSubMenu  =  NULL;
                state.DoUpdate(
this , state.m_nID  <   0xF000 );
            }
        }
    }
 }
// 还得添加消息映射:
BEGIN_MESSAGE_MAP(CcontrolDlg, CDialog)
ON_WM_INITMENUPOPUP()
END_MESSAGE_MAP()

// 现在便会按照你要打开菜单时它的可用性而显示是否变灰:)

转载于:https://www.cnblogs.com/yjm0105/archive/2005/05/27/163314.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值