VC菜单与加速键

 

VC菜单与加速键
1.      Windows 消息
Windows 中,消息有以下三种类型:
(1)   标准 Windows 消息:指以 WM_ 为前缀的那些消息(除了 WM_COMMAND ),如窗口移动消息 WM_MOVE ,窗口大小改变消息 WM_SIZE ,此外,如程序启动或退出,窗口创建和关闭等等。
(2)   控件通知消息:由编辑框,列表框等控件或子窗口发给其父窗口的通知消息,以 WM_COMMAND 为消息名,在消息中包含有控件通知代码,以区分具体的控件通知消息。
(3)   命令消息:命令消息也以 WM_COMMAND 为消息名,在消息中包含有命令的标识符( ID ),以区分具体的命令。命令消息的来源是以下三种用户接口对象:
菜单:用户选择某菜单项,要产生相应的命令消息。
工具栏:用户按下某工具栏按钮产生相应的命令消息。
加速键:用户在键盘上按下了定义的加速键也将产生相应的命令消息。
2 .创建菜单和加速键示例程序
(1) 创建一个 SDI 工程,名称是: CMenuExample
(2) 打开 ResourceView 标签,展开 Menu 项。添加“我的菜单”,然后在其下面创建两个子项 :ID_MYMENU_HELLOWORLD ,“ HelloWord &S )” ;ID_MYMENU_HELLOC ,“ HelloVC++ &V )”。 Prompt 中可以添加显示在状态条中的提示信息。
(3) ID_MYMENU_HELLOWORLD 添加 COMMAND 消息函数。同时为 ID_MYMENU_HELLOC 添加 COMMAND 消息函数。其实现代码如下:
void CCMenuExampleView::OnMymenuHelloc()
{
       // TODO: Add your command handler code here
       MessageBox( " 您点的 Hello VC++!" , "Hello VC++!" );
}
 
void CCMenuExampleView::OnMymenuHelloworld()
{
       // TODO: Add your command handler code here
       MessageBox( " 您点的 HelloWorld!" , "HelloWorld!" );
}
(4)   为上述两个菜单项添加对应的键盘加速键。在工作区 ResourceView 标签,展开 Accelerator 项,在 IDR_MAINFRAME 上双击,启动加速键编辑器。在最后的虚框上双击鼠标,分别输入 ID Key 组合框中输入或选择相应的加速键。分别为 F11 F12 。在“ HelloWorld &S )”后面加上“ /tF11。同理,另一个为”/tF12”
(5)   下面为“ HelloWorld ”添加菜单项的状态更新处理。为视图类加一个成员变量。    BOOL m_hHaveHelloWorld; 然后在视图类的构造函数中初始化次变量如下:
   CCMenuExampleView::CCMenuExampleView()
{
       // TODO: add construction code here
       m_hHaveHelloWorld = TRUE;
 
}
   为“ HelloWorld ”菜单项的更新用户接口对象状态命令添加消息处理函数。
ID_MYMENU_HELLOWORLD 添加 UPDATE_COMMAND_UI 消息。如下:
void CCMenuExampleView::OnUpdateMymenuHelloworld(CCmdUI* pCmdUI)
{
       // TODO: Add your command update UI handler code here
       pCmdUI->Enable(m_hHaveHelloWorld);
}
   在视图类中添加改变 m_hHaveHelloWorld 成员变量值的函数。在这里我们响应鼠标的左键, m_hHaveHelloWorld 置为 FALSE ,右键置为 TRUE 。如下:
void CCMenuExampleView::OnLButtonDown(UINT nFlags, CPoint point)
{
       // TODO: Add your message handler code here and/or call default
       MessageBox( "Sorry, 你不能点这个按钮了 !" , "Sorry!" );
       m_hHaveHelloWorld = FALSE;
 
       CView::OnLButtonDown(nFlags, point);
}
 
void CCMenuExampleView::OnRButtonDown(UINT nFlags, CPoint point)
{
       // TODO: Add your message handler code here and/or call default
       MessageBox( " 运气不错,你可以点此按钮 !" , "Good Luck!" );
       m_hHaveHelloWorld = TRUE;
       CView::OnRButtonDown(nFlags, point);
}
编译连接运行本程序。

 

你可能感兴趣的:(windows,UI,command,vc++,工具,construction)