精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>WINDOWS界面设计>>关于菜单控制的若干话题

主题:关于菜单控制的若干话题
发信人: tsingxiao()
整理人: girlrong(1999-11-13 15:04:09), 站内信件
    为什么即使调用EnableMenuItem菜单项后,菜单项还处于禁止状态

    需要将CFrameWnd:: m_bAutomenuEnable设置为FALSE,如果该数据成员为TR
UE(缺

值),工作框将自动地禁止没有ON_UPDATE_COMMAND_UI或者ON_COMMAND的菜单项


    file://Disable MFC from automatically disabling menu items.

    m_bAuoMenuEnable=FALSE;

    file://Now enable the menu item.

    CMenu* pMenu=GetMenu ();

    ASSERT_VALID (pMenu);

    pMenu->EnableMenuItem (ID_MENU_ITEM,MF_BYCOMMAND | MF_ENABLED);

    如何给系统菜单添加一个菜单项

    给系统菜单添加一个菜单项需要进行下述三个步骤:

    首先,使用Resource Symbols对话(在View菜单中选择Resource Symbols.
..

    可以显示该对话)定义菜单项ID,该ID应大于0x0F而小于0xF000;

    其次,调用CWnd::GetSystemMenu获取系统菜单的指针并调用CWnd:: Append
menu将

单项添加到菜单中。下例给系统菜单添加两个新的菜单项:

    int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct)
    {
    …
    file://Make sure system menu item is in the right range.
    ASSERT (IDM_MYSYSITEM &0xFFF0)==IDM_MYSYSITEM);
    ASSERT (IDM-MYSYSITEM<0xF000);
file://Get pointer to system menu.
CMenu* pSysmenu=GetSystemmenu (FALSE);
ASSERT_VALID (pSysMenu);
file://Add a separator and our menu item to system menu.
CString StrMenuItem (_T ("New menu item"));
pSysMenu->Appendmenu (MF_SEPARATOR);
    pSysMenu->AppendMenu (MF_STRING, IDM_MYSYSITEM, strMenuitem);
    …
    }

    现在,选择系统菜单项时用户应进行检测。使用ClassWizard处理WM_SYSCOM
MAND消

并检测用户菜单的nID参数:

    void CMainFrame:: OnSysCommand (UINT nID,LPARAM lParam)
    {
    file://Determine if our system menu item was selected.
    if ( (nID & 0xFFF0)==IDM_MYSYSITEM)
    {
    file://TODO-process system menu item
    }
    else
    CMDIFrameWnd:: OnSysCommand (nID, lParam);
    }

  最后,一个设计良好的UI应用程序应当在系统菜单项加亮时在状态条显示一个
帮助
信息,这可以通过增加一个包含系统菜单基ID的串表的入口来实现。

--

  既不能达而兼善天下
                    只好穷而独善自身
  青山处处  斯民如土矣……

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.253.41]

[关闭][返回]