艾瑞研究:CCmdUI 类

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 02:53:04

CCmdUI 类没有基类,

 

当用户点击应用程序中的菜单时,菜单中的每个菜单项需要知道它应该显示为可用或不可用。这个菜单通过实现ON_UPDATE_COMMAND_UI 来提供这个通知给每个菜单项。用户应用程序中的每个命令都应该通过属性窗口来构造这么一个消息对。(例:ON_UPDATE_COMMAND_UI(ID_HIGH_QUALITY, &CMainFrame::OnUpdateHighQuality))

 

当这个菜单被按下的时候,应用程序框架就会搜索与这个菜单对应的ON_UPDATE_COMMAND_UI 消息对,并调用消息对中指定的函数(这个函数的参数中有CCmdUI 类的对象),在这个函数中可以调用CCmdUI 的成员函数如Enable或者SetCheck 等来设置每个菜单项。

 

1、Enable函数的函数原型为:

 

virtual void Enable(

   BOOL bOn = TRUE

);bOn

TRUE to enable the item, FALSE to disable it.

 

TRUE的话这个项可以使用,FALSE则是禁用。

 

2、SetCheck 的函数原型为:

 

virtual void SetCheck(

   int nCheck = 1

);

nCheck :Specifies the check state to set. If 0, unchecks; if 1, checks; and if 2, sets indeterminate.

 

0不选中、1选中、2终止

 

3、SetRadio 的函数原型为:

 

virtual void SetRadio(

   BOOL bOn = TRUE

);

 

 

bOn

TRUE to enable the item; otherwise FALSE.

 

This member function operates like SetCheck, except that it operates on user-interface items acting as part of a radio group. Unchecking the other items in the group is not automatic unless the items themselves maintain the radio-group behavior.

 

这个方法的作用SetCheck相似,不过这个方法作用于一组单选按钮

 

图例:

 

 

代码示例:

 

view plaincopy to clipboardprint?

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)  

    ON_WM_CREATE()  

    ON_WM_TIMER()  

    ON_WM_CLOSE()  

    ON_COMMAND(ID_RECORD_START, &CMainFrame::OnRecordStart)  

    ON_COMMAND(ID_RECORD_STOP, &CMainFrame::OnRecordStop)  

    ON_UPDATE_COMMAND_UI(ID_RECORD_START, &CMainFrame::OnUpdateRecordStart)  

    ON_UPDATE_COMMAND_UI(ID_RECORD_STOP, &CMainFrame::OnUpdateRecordStop)  

    ON_COMMAND(ID_HIGH_QUALITY, &CMainFrame::OnHighQuality)  

    ON_COMMAND(ID_LOW_QUALITY, &CMainFrame::OnLowQuality)  

    ON_UPDATE_COMMAND_UI(ID_HIGH_QUALITY, &CMainFrame::OnUpdateHighQuality)  

    ON_UPDATE_COMMAND_UI(ID_LOW_QUALITY, &CMainFrame::OnUpdateLowQuality)  

END_MESSAGE_MAP() 

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

       ON_WM_CREATE()

       ON_WM_TIMER()

       ON_WM_CLOSE()

       ON_COMMAND(ID_RECORD_START, &CMainFrame::OnRecordStart)

       ON_COMMAND(ID_RECORD_STOP, &CMainFrame::OnRecordStop)

       ON_UPDATE_COMMAND_UI(ID_RECORD_START, &CMainFrame::OnUpdateRecordStart)

       ON_UPDATE_COMMAND_UI(ID_RECORD_STOP, &CMainFrame::OnUpdateRecordStop)

       ON_COMMAND(ID_HIGH_QUALITY, &CMainFrame::OnHighQuality)

       ON_COMMAND(ID_LOW_QUALITY, &CMainFrame::OnLowQuality)

       ON_UPDATE_COMMAND_UI(ID_HIGH_QUALITY, &CMainFrame::OnUpdateHighQuality)

       ON_UPDATE_COMMAND_UI(ID_LOW_QUALITY, &CMainFrame::OnUpdateLowQuality)

END_MESSAGE_MAP()

 

view plaincopy to clipboardprint?

void CMainFrame::OnRecordStart()  

{  

    // TODO: 在此添加命令处理程序代码  

    MessageBeep(MB_ICONASTERISK);  

    this->m_bWorking = TRUE;  

}  

 

void CMainFrame::OnRecordStop()  

{  

    // TODO: 在此添加命令处理程序代码  

    MessageBeep(MB_ICONHAND);  

    this->m_bWorking = FALSE;  

}  

 

void CMainFrame::OnUpdateRecordStart(CCmdUI *pCmdUI)  

{  

    // TODO: 在此添加命令更新用户界面处理程序代码  

    pCmdUI->Enable(!m_bWorking);   

}  

 

void CMainFrame::OnUpdateRecordStop(CCmdUI *pCmdUI)  

{  

    // TODO: 在此添加命令更新用户界面处理程序代码  

    pCmdUI->Enable(m_bWorking) ;  

 

}  

 

void CMainFrame::OnHighQuality()  

{  

    // TODO: 在此添加命令处理程序代码  

    m_bHighQuality=TRUE;   

}  

 

void CMainFrame::OnLowQuality()  

{  

    // TODO: 在此添加命令处理程序代码  

    m_bHighQuality=FALSE;  

}  

 

void CMainFrame::OnUpdateHighQuality(CCmdUI *pCmdUI)  

{  

    // TODO: 在此添加命令更新用户界面处理程序代码  

    pCmdUI->SetCheck(m_bHighQuality);   

}  

 

void CMainFrame::OnUpdateLowQuality(CCmdUI *pCmdUI)  

{  

    // TODO: 在此添加命令更新用户界面处理程序代码  

    pCmdUI->SetCheck(!m_bHighQuality);