1 / 28

菜单,加速键资源

菜单,加速键资源. 菜单资源的组成 菜单资源的创建 菜单资源的操作 菜单资源的动态创建 加速键资源的创建. 窗口主菜单栏. 菜单资源的组成. 热键标识. 下拉式菜单框. 加速键. 分隔线. 菜单资源的创建. 定义菜单 在资源描述文件中定义: 菜单名 MENU [ 菜单选项 ] { POPUP” 菜单项名(热键)” [ 菜单项选项 ] { MENUITEM” 菜单条目名 加速键”, ID[ 菜单条目选项 ] } } 热键: &+ 单字符,表示该菜单使用 Alt +单字符作为热键。. 菜单选项.

kenny
Download Presentation

菜单,加速键资源

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 菜单,加速键资源 • 菜单资源的组成 • 菜单资源的创建 • 菜单资源的操作 • 菜单资源的动态创建 • 加速键资源的创建

  2. 窗口主菜单栏 菜单资源的组成 热键标识 下拉式菜单框 加速键 分隔线

  3. 菜单资源的创建 • 定义菜单 在资源描述文件中定义: 菜单名 MENU [菜单选项] { POPUP”菜单项名(热键)”[菜单项选项] { MENUITEM”菜单条目名 加速键”,ID[菜单条目选项] } } 热键:&+单字符,表示该菜单使用Alt+单字符作为热键。

  4. 菜单选项 • DISCARDABLE 当不再需要菜单时可丢弃 • FIXEDP 菜单保存在内存中的固定位 置 • LOADONCALL 需要时加载菜单 • MOVEABLE 菜单在内存中可移动 • PRELOAD 立即加载菜单

  5. 菜单项选项 • MENUBARBREAK 菜单项纵向分隔标志 • CHECKED 显示选中标志 • INACTIVE 禁止一个菜单项 • GRAYED 禁止一个菜单项并变灰显 示

  6. 菜单定义资源文件 #include”Menu.h” Menu MENU MOVEABLE { POPUP “文件(&F)” { MENUITEM”新建”,IDM_NEW MENUITEM”打开”,IDM_OPEN MENUITEM SEPERETOR //分隔线 MENUITEM “退出”,IDM_EXIT } }

  7. 菜单定义头文件 //Menu.h #define IDM_NEW 10 #define IDM_OPEN 11 #define IDM_EXIT 12

  8. 加载菜单资源 在Windows应用程序中加载菜单资源有三种方法: • 在窗口类中加载菜单 • 在创建窗口时加载菜单 • 动态加载菜单 显示菜单

  9. 在窗口中加载菜单资源 WNDCLASS wndclass Wndclass.lpszMenuName=lpszMenuName;

  10. 创建窗口时加载菜单 在CreateWindow函数中加载菜单: HMENU hMenu1; hMenu1=LoadMenu(hInstance, MenuName); CreateWindow(……,hMenu1,……);

  11. 动态加载菜单 通过SetMenu函数可以动态加载菜单。 HMENU hMenu1; hMenu1=LoadMenu(hInstance, MenuName); SetMenu(hwnd,hMenu1);

  12. 显示菜单 • 菜单加载后还要调用显示函数显示菜单: DrawMenuBar(hwnd);

  13. 菜单项的操作 • 禁止或激活菜单项 BOOL EnableMenuItem( HMENU hMenu, UINT uIDEnableItem, // 菜单项标识 UINT uEnable // 菜单项选项 ); uEnable表示: (1) uIDEnableItem是菜单项ID值还是它在菜单中的位置 (2)菜单项的状态

  14. uEnable选项 MF_BYCOMMAND 以ID标识菜单项 MF_BYPOSITION 以位置标识菜单项 MF_DISABLED 禁止菜单项 MF_ENABLED 激活菜单项 MF_GRAYED 禁止菜单项并使其变灰

  15. 例如: hMenu1=GetMenu(hwnd); EnableMenuItem( hMenu1, IDM_OPEN, MF_BYCOMMAND|MF_GRAYED ); 禁止hMenu1中的IDM_OPEN菜单项并使其变灰显示 菜单项以ID标识

  16. 设置或取消选中标志 两种方法: • 在资源描述文件中设置“CHECKED” • 调用函数 DWORD CheckMenuItem( HMENU hmenu, UINT uIDCheckItem, //菜单项 UINT uCheck //菜单项选项 );

  17. uCheck选项 MF_BYCOMMAND 以ID标识菜单项 MF_BYPOSITION 以位置标识菜单项 MF_CHECKED 添加选中标志 MF_UNCHECKED 删除选中标志 例如: if(!check) { CheckMenuItem(hMenu1,IDM_OPEN,MF_CHECKED); nCheck=1; } else { CheckMenuItem(hMenu1,IDM_OPEN,MF_UNCHECKED); nCheck=0; }

  18. 增加菜单项 增加菜单项有两种形式 • 在菜单尾部增加菜单项 BOOL AppendMenu ( HMENU hMenu, UINT uFlags, // 菜单项标识 UINT uIDNewItem, // 新加入的菜单项ID LPCTSTR lpNewItem // 新加入菜单项文字显示 );

  19. 在菜单中插入菜单项 BOOL InsertMenu ( HMENU hMenu, UINT uPosition, //插入位置 UINT uFlags, //对uPosition的解释 UINT uIDNewItem, //新菜单项标识 LPCTSTR lpNewItem //新菜单项内容 );

  20. 例如: • 在菜单尾部增加菜单项 AppendMenu(hMenu1,MF_ENABLED, IDM_VIEW,"VIEW"); //在菜单尾部增加一个VIEW下拉菜单 • 在菜单中插入菜单项 InsertMenu(hMenu1,IDM_NEW, MF_BYCOMMAND|MF_ENABLED, IDM_OPENAS,"OPEN AS“); //在file->new前增加open as项

  21. 删除菜单项 BOOL DeleteMenu( HMENU hMenu, UINT uPosition, // 要删除的菜单项 UINT uFlags // 对uPosition的解释 ); 例如: DeleteMenu(hMenu1,IDM_VIEW, MF_BYCOMMAND); //删除VIEW菜单项

  22. 修改菜单项 BOOL ModifyMenu( HMENU hMnu, UINT uPosition, //要修改的菜单项 UINT uFlags, //对uPosition的解释 UINT uIDNewItem, //修改后的菜单ID LPCTSTR lpNewItem // 修改后的菜单文本显示 ); 例如: ModifyMenu(hMenu1,IDM_VIEW, MF_BYCOMMAND, IDM_WINDOW,"window");

  23. 菜单的动态创建 菜单的动态创建分三个步骤: 一、创建空的弹出式菜单: hprintmenu=CreateMenu(); 二、向新菜单中加入菜单项: AppendMenu(hprintmenu, MF_ENABLED, IDM_LINE,“求和”); 三、将新建菜单插入到主菜单中: InsertMenu(hmenu,2, MF_POPUP|MF_BYPOSITION, (UINT)hprintmenu,"统计计算(&C)");

  24. 加速键资源的创建 加速键表名 ACCELERATORS ,[类型] { 加速键定义 }

  25. 加载加速键 HACCEL hAccel1; hAccel1=LoadAccelerators( hInstrance,//当前实例句柄 IDR_ACCELERATOR1 //加速键ID )

  26. 翻译加速键 在应用程序的消息循环中将加速键消息翻译成菜单消息: while( GetMessage(&Msg, NULL, 0, 0)) { //在消息循环中截获加速键消息 if(!TranslateAccelerator(hwnd,hAccel,&Msg)); { TranslateMessage( &Msg) ; DispatchMessage( &Msg) ; } }

More Related