《第7章资源在Windows编程中的应用.ppt》由会员分享,可在线阅读,更多相关《第7章资源在Windows编程中的应用.ppt(76页珍藏版)》请在优知文库上搜索。
1、第第7 7章章 资源在资源在WindowsWindows编程中的应用编程中的应用在在Windows应用程序中可以使用几种不同类型的资源应用程序中可以使用几种不同类型的资源加速键加速键位图位图对话框对话框和菜单等和菜单等这些资源可以使用这些资源可以使用VCVC提供的资源编辑器来实现创建和编辑提供的资源编辑器来实现创建和编辑资源的使用,方便了应用资源的使用,方便了应用程序与用户之间的交互程序与用户之间的交互菜单是菜单是Windows图形用户界面中图形用户界面中窗口的重要组成窗口的重要组成部分部分菜单可使用户直观菜单可使用户直观地了解并使用应用地了解并使用应用程序所提供的功能程序所提供的功能加速键可
2、使加速键可使菜单的操作菜单的操作更灵活快捷更灵活快捷两种资源往往密不可分两种资源往往密不可分窗口主菜单条窗口主菜单条下拉式菜单框下拉式菜单框菜单项热键标识菜单项热键标识菜单项加速键标识菜单项加速键标识菜单项分隔线菜单项分隔线选中与否的标识选中与否的标识7.1菜单与加速键资源菜单与加速键资源 创建菜单过程分为定义和加载两个步骤创建菜单过程分为定义和加载两个步骤1.定义菜单定义菜单选选 项项说说 明明DISCARDABLE当当不不再再需需要要菜菜单单时时可可丢丢弃弃FIXED将将菜菜单单保保存存在在内内存存中中的的固固定定位位置置LOADONCALL需需要要时时加加载载菜菜单单MOVEABLE菜菜
3、单单在在内内存存中中可可移移动动PRELOAD立立即即加加载载菜菜单单菜单项是菜单菜单项是菜单的组成部分。的组成部分。应用程序在资应用程序在资源描述文件中源描述文件中使用关键字使用关键字POPUP和和MENUITEM 定义菜单项定义菜单项菜单名菜单名MENU,MENU,选项选项 菜单项列表菜单项列表 菜单在资源描菜单在资源描述文件中定义述文件中定义用以标识菜用以标识菜单所具有的单所具有的载入特性载入特性菜单菜单定义定义结构结构菜单名菜单名MENU关键字关键字载载 入入 特特 性性 选选 项项菜单项菜单项7.1.1菜单的创建过程菜单的创建过程POPUP语句定义弹出式菜单,其形式为:语句定义弹出式
4、菜单,其形式为:POPUP“POPUP“菜单项名菜单项名”,选项,选项;在菜单项名中加入符号在菜单项名中加入符号“&”可定义该菜单项的热键。例如:可定义该菜单项的热键。例如:POPUP“POPUP“编辑(编辑(&E&E)”;该菜单项使用该菜单项使用Alt+E键作为热键。键作为热键。菜单项的常用选项及其说明见下表。菜单项的常用选项及其说明见下表。选选 项项说说 明明MENUBARBREAK菜菜单单项项纵纵向向分分隔隔标标志志CHECKED显显示示选选中中标标志志INACTIVE禁禁止止一一个个菜菜单单项项GRAYED禁禁止止一一个个菜菜单单项项并并使使其其变变灰灰显显示示POPUP定义的弹出式菜
5、单项还包含子菜单定义的弹出式菜单项还包含子菜单MENUITEM语句用于定义菜单项,其形式为:语句用于定义菜单项,其形式为:MENUITEM“MENUITEM“菜单项名菜单项名”菜单项标识(菜单项标识(IDID),选项,选项 每个菜单项的标识必须唯一每个菜单项的标识必须唯一应用程序通过此标识值确认每一个菜单项消息应用程序通过此标识值确认每一个菜单项消息标识值可为标识值可为0到到65535之间的任一整数之间的任一整数ID为菜单为菜单项标识项标识WM_COMMANDWM_COMMAND消息中消息中字参数字参数wParamwParam中包中包含选中菜单项的标识含选中菜单项的标识使用下面的语句可创建菜单
6、使用下面的语句可创建菜单中的水平分隔符:中的水平分隔符:MENUITEM SEPARATOR;MENUITEM SEPARATOR;例例 在在“Menu”的窗口中创建一个的窗口中创建一个“文件文件”菜单。该菜单含有菜单。该菜单含有“新建新建”、“打开打开”、“关闭关闭”、“保存保存”、“另存为另存为”及及“退出退出”等菜单项。菜单项均使用热键;并等菜单项。菜单项均使用热键;并且且“退出退出”项与其他菜单项之间用分隔线分开。项与其他菜单项之间用分隔线分开。#include#include#include“Menu.h”#include“Menu.h”菜单定义菜单定义Menu MENU MOVEA
7、BLE Menu MENU MOVEABLE MenuMenu为窗口菜单的名称为窗口菜单的名称 POPUP“POPUP“文件文件(&F)”(&F)”定义定义“文件文件”弹出式菜单弹出式菜单 MENUITEMMENUITEM“新建新建(&N)”(&N)”,IDM_NEWIDM_NEW MENUITEMMENUITEM“打开打开(&O)”(&O)”,IDM_OPENIDM_OPEN MENUITEMMENUITEM“关闭关闭(&C)”(&C)”,IDM_CLOSEIDM_CLOSE MENUITEMMENUITEM“保存保存(&S)”(&S)”,IDM_SAVEIDM_SAVE MENUITEMM
8、ENUITEM“另存为另存为(&A)”(&A)”,IDM_SAVEASIDM_SAVEAS MENUITEM MENUITEM SEPARATOR SEPARATOR 分隔线分隔线 MENUITEMMENUITEM“退出退出(&X)”(&X)”,IDM_EXITIDM_EXIT Menu.h Menu.h 定义了菜单项标定义了菜单项标识所对应的数值:识所对应的数值:#define IDM_NEW 10#define IDM_NEW 10#define IDM_OPEN 11#define IDM_OPEN 11#define IDM_CLOSE 12#define IDM_CLOSE 12#d
9、efine IDM_SAVE 13#define IDM_SAVE 13#define IDM_SAVEAS 14#define IDM_SAVEAS 14#define IDM_EXIT 15#define IDM_EXIT 152.加载菜单资源加载菜单资源WNDCLASS wndclass;WNDCLASS wndclass;wndclass.lpszMenuName=lpszMenuNamewndclass.lpszMenuName=lpszMenuName;1.在窗口类在窗口类中加载菜单中加载菜单应用程序需先调用函数应用程序需先调用函数LoadMemu加载菜单加载菜单 HMENU Lo
10、adMemu HMENU LoadMemu (hInstance,/hInstance,/当前程序的实例句柄当前程序的实例句柄 lpszMenuNamelpszMenuName/窗口菜单名窗口菜单名 );如:如:hmenu=LoadMenu(hlnstancehmenu=LoadMenu(hlnstance,Menu),Menu);hwnd=CreateWindow(hwnd=CreateWindow(,hmenuhmenu,,);,);2.在创建在创建窗口时窗口时加载菜单加载菜单3.动态加动态加载菜单载菜单应用程序获取菜单句柄后,可通过应用程序获取菜单句柄后,可通过SetMenu动态地加载菜
11、单动态地加载菜单 BOLL SetMenuBOLL SetMenu(/HWND/HWND为窗口句柄,为窗口句柄,HMENUHMENU为菜单句柄为菜单句柄 HWND hwnd,HWND hwnd,HMENU hmenu HMENU hmenu);在应在应用程用程序中序中加载加载菜单菜单有三有三种方种方法法可在同一个应用可在同一个应用程序中实现多种程序中实现多种不同的菜单操作界面不同的菜单操作界面菜单菜单操作操作禁止或激活菜单项禁止或激活菜单项(指定该菜单项的初始状态)设置或取消选中标志设置或取消选中标志(“”)增加、删除或修改菜单项等操作增加、删除或修改菜单项等操作7.1.2菜单项的操作菜单项的
12、操作创建菜单时,可以调用函数创建菜单时,可以调用函数EnableMenuItem改变其初始状态改变其初始状态DWORD EnableMenuItem(HMENU hmenu,UlNT wIDEnableItem,/被禁止或激活的菜单项标识被禁止或激活的菜单项标识 UINT dwEnable)/dwEnable为菜单项操作标识为菜单项操作标识MF_BYCOMMAND以以ID值标识菜单项值标识菜单项MF_ENABLED激活菜单项激活菜单项MF_BYPOSITION以位置标识菜单项以位置标识菜单项MF_GRAYED禁止菜单项并使其变灰显示禁止菜单项并使其变灰显示MF_DISABLED禁止菜单项禁止菜
13、单项菜单项的菜单项的ID值值/在菜单中位置在菜单中位置例如,禁止弹出式菜单例如,禁止弹出式菜单“文件文件”中的中的“打开打开”项的形式如下:项的形式如下:EnableMenuItem(hmenuEnableMenuItem(hmenu,IDM_OPEN,MF_BYCOMMAND|MF_DISABLED),IDM_OPEN,MF_BYCOMMAND|MF_DISABLED);1.禁止或激活菜单项禁止或激活菜单项(1)在资源描述文件中设置菜单项的为在资源描述文件中设置菜单项的为CHECKED(2)调用函数调用函数CheckMenuItem设置或取消选中标志设置或取消选中标志DWORD CheckM
14、enultemDWORD CheckMenultem(HMENU hmenHMENU hmen,UINT wIDCheckItemUINT wIDCheckItem,/,/设置或取消选中标志的菜单项标识设置或取消选中标志的菜单项标识UINT dwCheckUINT dwCheck)/操作标识操作标识据据dwCheckdwCheck的取值,可为的取值,可为该菜单项的该菜单项的IDID值或为该值或为该菜单项在菜单中位置菜单项在菜单中位置MF_BYCOMMANDMF_BYCOMMAND表明以表明以IDID值标识菜单项值标识菜单项MF_CHECKEDMF_CHECKED添加选中标志添加选中标志MF_B
15、YPOSITIONMF_BYPOSITION表明以位置标识菜单项表明以位置标识菜单项MF_UNCHECKEDMF_UNCHECKED删除选中标志删除选中标志2.设置或取消选中设置或取消选中(“”)标志标志两种形式:两种形式:尾部增加尾部增加/菜单中插入菜单中插入(a)在菜单的尾部增加菜单项在菜单的尾部增加菜单项可调用函数可调用函数AppendMenu BOOL AppendMenuBOOL AppendMenu(HMENU hmenuHMENU hmenu,/新菜单项的类型标识或其他信息新菜单项的类型标识或其他信息UINT dwFlagsUINT dwFlags,UINT dwIDNewIte
16、mUINT dwIDNewItem,/,/菜单项的标识菜单项的标识菜单项内容菜单项内容,取决与取决与dwFlagsdwFlags参数参数LPCTSTR lpNewItemLPCTSTR lpNewItem)/)/1.通常是插入项的通常是插入项的ID值;值;2.若加入的是弹出式菜单,则为此菜单句柄若加入的是弹出式菜单,则为此菜单句柄(b)在菜单中插入菜单项在菜单中插入菜单项调用函数调用函数InsertMenu BOOL lnsertMenuBOOL lnsertMenu(HMENU hmenuHMENU hmenu,UINT wPositionUINT wPosition,/,/菜单项插入的位置菜单项插入的位置/新菜单项的信息及对新菜单项的信息及对wPositionwPosition的解释的解释UINT dwFlagUINT dwFlag,UINT dwIDNweltemUINT dwIDNweltem,/,/菜单项的菜单项的IDID标识标识/菜单项的内容菜单项的内容LPCTSTR lpNewltemLPCTSTR lpNewltem)dwFlagMF_BYCOMMANDMF_BYCOM