第7章 资源在Windows编程中的应用.ppt

上传人:qwe****56 文档编号:70013895 上传时间:2023-01-14 格式:PPT 页数:76 大小:799.50KB
返回 下载 相关 举报
第7章 资源在Windows编程中的应用.ppt_第1页
第1页 / 共76页
第7章 资源在Windows编程中的应用.ppt_第2页
第2页 / 共76页
点击查看更多>>
资源描述

《第7章 资源在Windows编程中的应用.ppt》由会员分享,可在线阅读,更多相关《第7章 资源在Windows编程中的应用.ppt(76页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第7 7章章 资源在资源在WindowsWindows编程中的应用编程中的应用在在Windows应用程序中可以使用几种不同类型的资源应用程序中可以使用几种不同类型的资源加速键加速键位图位图对话框对话框和菜单等和菜单等这些资源可以使用这些资源可以使用VCVC提供的资源编辑器来实现创建和编辑提供的资源编辑器来实现创建和编辑资源的使用,方便了应用资源的使用,方便了应用程序与用户之间的交互程序与用户之间的交互菜单是菜单是Windows图形用户界面中图形用户界面中窗口的重要组成窗口的重要组成部分部分菜单可使用户直观菜单可使用户直观地了解并使用应用地了解并使用应用程序所提供的功能程序所提供的功能加速键可

2、使加速键可使菜单的操作菜单的操作更灵活快捷更灵活快捷两种资源往往密不可分两种资源往往密不可分窗口主菜单条窗口主菜单条下拉式菜单框下拉式菜单框菜单项热键标识菜单项热键标识菜单项加速键标识菜单项加速键标识菜单项分隔线菜单项分隔线选中与否的标识选中与否的标识7.1菜单与加速键资源菜单与加速键资源 创建菜单过程分为创建菜单过程分为定义定义和和加载加载两个步骤两个步骤1.定义菜单定义菜单菜单项是菜单菜单项是菜单的组成部分。的组成部分。应用程序在资应用程序在资源描述文件中源描述文件中使用关键字使用关键字POPUP和和MENUITEM 定义菜单项定义菜单项菜单名菜单名MENU,MENU,选项选项 菜单项列表

3、菜单项列表 菜单在资源描菜单在资源描述文件中定义述文件中定义用以标识菜用以标识菜单所具有的单所具有的载入特性载入特性菜单菜单定义定义结构结构菜单名菜单名MENU关键字关键字载载 入入 特特 性性 选选 项项菜单项菜单项7.1.1菜单的创建过程菜单的创建过程POPUP语句定义弹出式菜单,其形式为:语句定义弹出式菜单,其形式为:POPUP“POPUP“菜单项名菜单项名”,选项,选项;在菜单项名中加入符号在菜单项名中加入符号“&”可定义该菜单项的热键。例如:可定义该菜单项的热键。例如:POPUP“POPUP“编辑(编辑(&E E)”;该菜单项使用该菜单项使用Alt+E键作为热键。键作为热键。菜单项的

4、常用选项及其说明见下表。菜单项的常用选项及其说明见下表。POPUP定义的弹出式菜单项还包含子菜单定义的弹出式菜单项还包含子菜单MENUITEM语句用于定义菜单项,其形式为:语句用于定义菜单项,其形式为:MENUITEM“MENUITEM“菜单项名菜单项名”菜单项标识(菜单项标识(IDID),选项选项 每个菜单项的标识必须唯一每个菜单项的标识必须唯一应用程序通过此标识值确认每一个菜单项消息应用程序通过此标识值确认每一个菜单项消息标识值可为标识值可为0到到65535之间的任一整数之间的任一整数ID为菜单为菜单项标识项标识WM_COMMANDWM_COMMAND消息中消息中字参数字参数wParamw

5、Param中包中包含选中菜单项的标识含选中菜单项的标识使用下面的语句可创建菜单使用下面的语句可创建菜单中的水平分隔符:中的水平分隔符:MENUITEM SEPARATOR;MENUITEM SEPARATOR;例例 在在“Menu”的窗口中创建一个的窗口中创建一个“文件文件”菜单。该菜单含有菜单。该菜单含有“新建新建”、“打开打开”、“关闭关闭”、“保存保存”、“另存为另存为”及及“退出退出”等菜单项。菜单项均使用热键;并等菜单项。菜单项均使用热键;并且且“退出退出”项与其他菜单项之间用分隔线分开。项与其他菜单项之间用分隔线分开。#include include#include“Menu.h”

6、#include“Menu.h”菜单定义菜单定义Menu MENU MOVEABLE 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“保存

7、保存(&(&S)”S)”,IDM_SAVEIDM_SAVE MENUITEMMENUITEM“另存为另存为(&(&A)”A)”,IDM_SAVEASIDM_SAVEAS MENUITEM MENUITEM SEPARATOR SEPARATOR 分隔线分隔线 MENUITEMMENUITEM“退出退出(&(&X)”X)”,IDM_EXITIDM_EXIT Menu.h Menu.h 定义了菜单项标定义了菜单项标识所对应的数值:识所对应的数值:#define IDM_NEW 10define IDM_NEW 10#define IDM_OPEN 11#define IDM_OPEN 11#def

8、ine IDM_CLOSE 12#define IDM_CLOSE 12#define 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;wndclasswndclass.lpszMenuNamelpszMenuName=lpszMenuNamelpszMenuName;1.在窗口类在窗口类中加载菜单中加载菜单应用程序需先调用函

9、数应用程序需先调用函数LoadMemu加载菜单加载菜单 HMENU HMENU LoadMemu LoadMemu (hInstance,/hInstance,/当前程序的实例句柄当前程序的实例句柄 lpszMenuNamelpszMenuName/窗口菜单名窗口菜单名 );如:如:hmenuhmenu=LoadMenuLoadMenu(hlnstancehlnstance,Menu),Menu);hwnd=CreateWindow(hwnd=CreateWindow(,hmenuhmenu,,);,);2.在创建在创建窗口时窗口时加载菜单加载菜单3.动态加动态加载菜单载菜单应用程序获取菜单句

10、柄后,可通过应用程序获取菜单句柄后,可通过SetMenu动态地加载菜单动态地加载菜单 BOLL BOLL SetMenuSetMenu(/HWND/HWND为窗口句柄,为窗口句柄,HMENUHMENU为菜单句柄为菜单句柄 HWND hwnd,HWND hwnd,HMENU HMENU hmenuhmenu);在应在应用程用程序中序中加载加载菜单菜单有三有三种方种方法法可在同一个应用可在同一个应用程序中实现多种程序中实现多种不同的菜单操作界面不同的菜单操作界面菜单菜单操作操作禁止或激活菜单项禁止或激活菜单项(指定该菜单项的初始状态)设置或取消选中标志设置或取消选中标志(“”)增加、删除或修改菜单

11、项等操作增加、删除或修改菜单项等操作7.1.2菜单项的操作菜单项的操作创建菜单时,可以调用函数创建菜单时,可以调用函数EnableMenuItem改变其初始状态改变其初始状态DWORD EnableMenuItem(HMENU hmenu,UlNT wIDEnableItem,/被禁止或激活的菜单项标识被禁止或激活的菜单项标识 UINT dwEnable)/dwEnable为菜单项操作标识为菜单项操作标识MF_BYCOMMAND以以ID值标识菜单项值标识菜单项MF_ENABLED激活菜单项激活菜单项MF_BYPOSITION以位置标识菜单项以位置标识菜单项MF_GRAYED禁止菜单项并使其变灰

12、显示禁止菜单项并使其变灰显示MF_DISABLED禁止菜单项禁止菜单项菜单项的菜单项的ID值值/在菜单中位置在菜单中位置例如,禁止弹出式菜单例如,禁止弹出式菜单“文件文件”中的中的“打开打开”项的形式如下:项的形式如下:EnableMenuItemEnableMenuItem(hmenuhmenu,IDM_OPEN,MF_BYCOMMAND|MF_DISABLED),IDM_OPEN,MF_BYCOMMAND|MF_DISABLED);1.禁止或激活菜单项禁止或激活菜单项(1)在资源描述文件中设置菜单项的为在资源描述文件中设置菜单项的为CHECKED(2)调用函数调用函数CheckMenuIt

13、em设置或取消选中标志设置或取消选中标志DWORD DWORD CheckMenultemCheckMenultem(HMENU HMENU hmenhmen,UINT UINT wIDCheckItemwIDCheckItem,/,/设置或取消选中标志的菜单项标识设置或取消选中标志的菜单项标识UINT UINT dwCheckdwCheck)/操作标识操作标识据据dwCheckdwCheck的取值,可为的取值,可为该菜单项的该菜单项的IDID值或为该值或为该菜单项在菜单中位置菜单项在菜单中位置MF_BYCOMMANDMF_BYCOMMAND表明以表明以IDID值标识菜单项值标识菜单项MF_C

14、HECKEDMF_CHECKED添加选中标志添加选中标志MF_BYPOSITIONMF_BYPOSITION表明以位置标识菜单项表明以位置标识菜单项MF_UNCHECKEDMF_UNCHECKED删除选中标志删除选中标志2.设置或取消选中设置或取消选中(“”)标志标志两种形式:两种形式:尾部增加尾部增加/菜单中插入菜单中插入(a)在菜单的尾部增加菜单项在菜单的尾部增加菜单项可调用函数可调用函数AppendMenu BOOL BOOL AppendMenuAppendMenu(HMENU HMENU hmenuhmenu,/新菜单项的类型标识或其他信息新菜单项的类型标识或其他信息UINT UIN

15、T dwFlagsdwFlags,UINT UINT dwIDNewItemdwIDNewItem,/,/菜单项的标识菜单项的标识菜单项内容菜单项内容,取决与取决与dwFlagsdwFlags参数参数LPCTSTR LPCTSTR lpNewItemlpNewItem)/)/1.通常是插入项的通常是插入项的ID值;值;2.若加入的是弹出式菜单,则为此菜单句柄若加入的是弹出式菜单,则为此菜单句柄(b)在菜单中插入菜单项在菜单中插入菜单项调用函数调用函数InsertMenu BOOL BOOL lnsertMenulnsertMenu(HMENU HMENU hmenuhmenu,UINT UIN

16、T wPositionwPosition,/,/菜单项插入的位置菜单项插入的位置/新菜单项的信息及对新菜单项的信息及对wPositionwPosition的解释的解释UINT UINT dwFlagdwFlag,UINT UINT dwIDNweltemdwIDNweltem,/,/菜单项的菜单项的IDID标识标识/菜单项的内容菜单项的内容LPCTSTR LPCTSTR lpNewltemlpNewltem)dwFlagMF_BYCOMMANDMF_BYCOMMAND:wPositionwPosition为插入位置的下一个菜单项的为插入位置的下一个菜单项的ID值值MF_BYPOSITIONMF

17、_BYPOSITION:wPositionwPosition为插入的位置号为插入的位置号3.增加菜单项增加菜单项例如:例如:在弹出式菜单在弹出式菜单“文件文件”的的“退出退出”项之前加入新的菜单项项之前加入新的菜单项“打印打印”的语句的语句lnsertMenulnsertMenu(hmenuhmenu,IDM_EXIT,MF_BYCOMMAND|MF,IDM_EXIT,MF_BYCOMMAND|MFENABLEDENABLED,IDM_PRINT IDM_PRINT,“打印(打印(&P P)”););例如在弹出式菜单例如在弹出式菜单“文件文件”的末尾增加一项的末尾增加一项“关于关于”的形式如下

18、:的形式如下:AppendMenuAppendMenu(hmenuhmenu,MF_ENABLED,IDM_ABOUT,“,MF_ENABLED,IDM_ABOUT,“关于(关于(&A A)”););应用程序可调用函数应用程序可调用函数DeleteMenu 删除菜单项删除菜单项 BOOL BOOL DeleteMenuDeleteMenu(HMENU HMENU hmenuhmenu,UINT UINT wPositionwPosition,/,/要删除菜单项的位置要删除菜单项的位置 UINT UINT dwFlagdwFlag);/);/对对wPositionwPosition的解释的解释

19、例如,删除弹出式例如,删除弹出式“文件文件”菜单中的菜单中的“另存为另存为”项的形式如下:项的形式如下:DeleteMenuDeleteMenu(hmenuhmenu,IDM_SAVEAS,MF_BYCOMMAND),IDM_SAVEAS,MF_BYCOMMAND)若删除的菜若删除的菜 单项含有弹出式菜单单项含有弹出式菜单则同时被删除。则同时被删除。4.删除菜单项删除菜单项 调用函数调用函数ModifyMenu可可修改菜单中的某个项修改菜单中的某个项BOOL BOOL ModifyMenuModifyMenu(HMENU HMENU hmenuhmenu,UINT UINT wPosition

20、wPosition,/指定需修改的菜单项位置指定需修改的菜单项位置UINT UINT dwFlagdwFlag,UINT UINT dwIDNweItemdwIDNweItem,/一般为修改后菜单项的标识一般为修改后菜单项的标识LPCTSTR LPCTSTR lpNewItemlpNewItem););/一般为修改后的菜单项名一般为修改后的菜单项名例如修改弹出式菜单例如修改弹出式菜单“文件文件”中中“打开打开”项为项为“加载加载”项的语句如下:项的语句如下:ModifyMenuModifyMenu(hmenuhmenu,IDM_OPEN,MF_BYCOMMAND,IDM _LOAD“,IDM_

21、OPEN,MF_BYCOMMAND,IDM _LOAD“加载加载(&(&L)”)L)”);5.修改菜单项修改菜单项1.调用函数调用函数createmenu创建空的弹出式菜单创建空的弹出式菜单 HMENU HMENU CreateMenuCreateMenu(void)(void)2.调用函数调用函数AppendMenu或或InsertMenu在该菜单中在该菜单中加入菜单项加入菜单项 AppendMenu AppendMenu(hmenuhmenu,/已有的菜单句柄已有的菜单句柄MF_POPUP,MF_POPUP,/创建的新弹出式菜单句柄创建的新弹出式菜单句柄(UINT)UINT)hmenuPo

22、puphmenuPopup,/该弹出式菜单的名字该弹出式菜单的名字lpszTitielpszTitie);动态地创建菜单可使系统资源更加节省,创建菜单分两个步骤动态地创建菜单可使系统资源更加节省,创建菜单分两个步骤:7.1.3菜单的动态创建菜单的动态创建 例如,在窗口菜单中动态创建弹出式菜单例如,在窗口菜单中动态创建弹出式菜单“编辑编辑”的过程如下:的过程如下:HMENU HMENU hmenuhmenu,/主窗口菜单句柄主窗口菜单句柄hPopupmenuhPopupmenu;/;/创建新的菜单句柄创建新的菜单句柄定义菜单句柄hPopumenuhPopumenu:CreateMenulCrea

23、teMenul;/在弹出式菜单中增加菜单项在弹出式菜单中增加菜单项AppenMenuAppenMenu(hPopupmenuhPopupmenu,MF_STRWG,IDM_COPY,“,MF_STRWG,IDM_COPY,“复制(复制(&E E)”)”);/将弹出式菜单加入到菜单中将弹出式菜单加入到菜单中AppendMenuAppendMenu(lmenulmenu,MF_POPUP,(UINT),MF_POPUP,(UINT)hmenuPopuphmenuPopup,“,“编辑编辑(&(&E)”)E)”);常伴随菜单使用的一常伴随菜单使用的一种非常有用的资源种非常有用的资源创建创建加速加速键

24、的键的步骤步骤1.在资源描述文件中定义加速键资源在资源描述文件中定义加速键资源2.加载加速键资源加载加速键资源3.翻译加速键翻译加速键加速键定义的格式为:加速键定义的格式为:键名,键名,加速键标识加速键标识(ID)ID),类型类型NOINVERTALTSHIFTCONTROLNOINVERTALTSHIFTCONTROL组合键的组合方式组合键的组合方式使用加速键时,菜单项不高亮度显示使用加速键时,菜单项不高亮度显示标识该键为标准键还是虚拟键标识该键为标准键还是虚拟键与所表示的菜单项与所表示的菜单项标识相同的标识值标识相同的标识值7.1.4加速键资源加速键资源常用的加速键有两种形式:常用的加速键

25、有两种形式:“char”,id 与与Ctrl 键组合的加速键。例如键组合的加速键。例如“文件文件”菜单中菜单中“保存保存”项的加项的加速键可定义为:速键可定义为:“S”,IDM_SAVES”,IDM_SAVE nCode,id VIRTKEY 使用虚拟键作为加速键。如使用虚拟键作为加速键。如VK_F1,VK_DELETE等。例如将等。例如将F1键定义为键定义为“帮助帮助”菜单项的加速键,其形式如下:菜单项的加速键,其形式如下:VK_F1,IDM_HELP,VIRKEYVK_F1,IDM_HELP,VIRKEY下面是资源描述文件对名为下面是资源描述文件对名为“Menu”的窗口菜单项的加速键定义:

26、的窗口菜单项的加速键定义:#includeinclude#includeMenu.h#includeMenu.h菜单定义菜单定义加速键表定义加速键表定义Menu ACCELERATORS Menu ACCELERATORS 加速键表名为加速键表名为“Menu”Menu”“N”,IDM_NEW“N”,IDM_NEW“O”,IDM_OPEN“O”,IDM_OPEN“S”,IDM_SAVE“S”,IDM_SAVE 1加载加速键资源加载加速键资源通过函数通过函数LoadAccelerators加载加速键资加载加速键资源,其形式为:源,其形式为:HACCEL HACCEL hAccelhAccel;hA

27、ccelhAccel=LoadAcceleratorsLoadAccelerators(hInstance,hInstance,/hInstancehInstance为当前程序实例句柄为当前程序实例句柄lpAcceINamelpAcceIName/lpAccelNamelpAccelName为加速键表名为加速键表名);2翻译加速键翻译加速键使用加速键可实现菜单项快捷切换,应用程序在消息循环中必须使用加速键可实现菜单项快捷切换,应用程序在消息循环中必须完成加速键消息到菜单消息的翻译。完成加速键消息到菜单消息的翻译。while(GetMessage(&Msg,NULL,0,0)while(GetM

28、essage(&Msg,NULL,0,0)if(!if(!TranslateAcceleratorsTranslateAccelerators(hwndhwnd,hAccelhAccel,&,&MagMag)TranslateMessageTranslateMessage(&(&MsgMsg);DispatchMessage(&Msg)DispatchMessage(&Msg);函数函数TranslateAcceleratorsTranslateAccelerators是翻译操作的核心是翻译操作的核心intint TranslateAcceleratorsTranslateAccelerato

29、rs(HWND hwnd,HWND hwnd,/为窗口句柄为窗口句柄HACCEL HACCEL hAccelhAccel,/为加速键表句柄为加速键表句柄lpMSGlpMSG lpMsglpMsg/为指向为指向MSGMSG结构的指针结构的指针)函数函数TranslateAccelerators的作用是的作用是对照加速键表,将相关的按键消息对照加速键表,将相关的按键消息WM_KEYDOWN和和WM_KEYUP 翻译成翻译成WM_COMMAND 或或WM_SYSCOMMAND的的消息。消息。其特点是将翻译后的其特点是将翻译后的WM_COMMAND或或WM_SYSCOMMAND消息直接发往窗口,而消息

30、直接发往窗口,而不在消息队列中等待不在消息队列中等待【例【例7-1】菜单资源及其创建。菜单资源及其创建。本例创建一个通用的窗口菜单的构架,本例创建一个通用的窗口菜单的构架,用户可通过选择用户可通过选择“文件文件”弹出式菜单中的弹出式菜单中的“创建统计计算菜单项创建统计计算菜单项”动动态地创建主菜单中的态地创建主菜单中的“统计计算统计计算”菜单项。菜单项。图图7-1是一个基本的菜单构架,图是一个基本的菜单构架,图7-2是动态创建是动态创建“统计计算统计计算”下下拉菜单的界面。拉菜单的界面。图图7-1图图7-27.1.5 创建菜单资源实例创建菜单资源实例该程序的实现步骤如下:该程序的实现步骤如下:

31、(3)调用函数调用函数DrawMenuBar重新显示改变后的窗口主菜单。重新显示改变后的窗口主菜单。BOOL DrawMenuBar(HWND hwnd)(1)用用GetMenu获取窗口主菜单句柄获取窗口主菜单句柄 int GetMenuint GetMenu(HWND hwnd)(HWND hwnd);(2)应用程序建立新菜单、加入菜单应用程序建立新菜单、加入菜单项并插入到主菜单的指定位置。在项并插入到主菜单的指定位置。在创建新的弹出式菜单后,应用程序创建新的弹出式菜单后,应用程序还通过调用函数还通过调用函数 EnableMenuItem禁止禁止“创建统计计算菜单项创建统计计算菜单项”并将并

32、将其暗淡显示。其暗淡显示。函数函数SendMessage 在应用程序中经常使用,其功能是向窗口发送消息在应用程序中经常使用,其功能是向窗口发送消息LONG SendMessage(HWND hwnd,UINT Msg,DWORD dwParam,LONG lParam)其中:其中:Msg为发送的消息;为发送的消息;dwParam和和lParam均为消息的附加信息。均为消息的附加信息。创建创建“统计计算统计计算”菜单项后,可通过菜单项后,可通过选择选择“文件文件”下拉菜单中的下拉菜单中的“删除统删除统计计算菜单项计计算菜单项”删除创建的删除创建的“统计计统计计算算”菜单项。菜单项。应用程序调用函

33、数应用程序调用函数DeleteMenu删除该删除该菜单项,并调用函数菜单项,并调用函数EnableMenuItem恢复恢复“创建统计计算菜单项创建统计计算菜单项”的属性。的属性。此外,该程序在响应此外,该程序在响应“文件文件”弹出式弹出式菜单中的菜单中的“退出退出”项时还使用了函数项时还使用了函数SendMessage。/菜单示例菜单示例.c c#include#include#include#include#include#include.h#include#include.h#define IDM_NEW 10#define IDM_NEW 10#define IDM_OPEN 11#de

34、fine IDM_OPEN 11#define IDM_CLOSE 12#define IDM_CLOSE 12#define IDM_SAVE 13#define IDM_SAVE 13#define IDM_SAVEAS 14#define IDM_SAVEAS 14#define IDM_ADDPRINTMENU#define IDM_ADDPRINTMENU 15 15#define IDM_DELPRINTMENU#define IDM_DELPRINTMENU 16 16#define IDM_EXIT 17#define IDM_EXIT 17#define IDM_CUT 18

35、#define IDM_CUT 18#define IDM_COPY 19#define IDM_COPY 19#define IDM_PASTE 20#define IDM_PASTE 20#define IDM_DELETE 21#define IDM_DELETE 21#define IDM_HELP 22#define IDM_HELP 22#define IDM_LINE 23#define IDM_LINE 23#define IDM_RECT 24#define IDM_RECT 24#define IDM_RRECT 25#define IDM_RRECT 25#define

36、IDM_ELLIP 26#define IDM_ELLIP 26HMENU HMENU hmenuhmenu,hprintmenuhprintmenu;/;/定义菜单句柄定义菜单句柄LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(int WINAPI WinMain()HWND HWND hwndhwnd;MSG;MSG MsgMsg;HACCEL;HACCEL hAccelhAccel;WNDCLASS;

37、WNDCLASS wndclasswndclass;char char lpszMenuNamelpszMenuName=Menu;=Menu;char lpszClassName=char lpszClassName=菜单菜单;char lpszTitle=My_Menu_Example;char lpszTitle=My_Menu_Example;wndclasswndclass.style=0;.style=0;wndclasswndclass.lpszClassNamelpszClassName=lpszClassName;=lpszClassName;if(!RegisterClas

38、s(&wndclass)if(!RegisterClass(&wndclass)MessageBeep(0);return FALSE;MessageBeep(0);return FALSE;hwndhwnd=CreateWindowCreateWindow(,.););ShowWindowShowWindow(hwndhwnd,nCmdShownCmdShow););UpdateWindowUpdateWindow(hwndhwnd););hAccelhAccel=LoadAcceleratorsLoadAccelerators(hInstancehInstance,lpszMenuName

39、lpszMenuName););while(while(GetMessageGetMessage(&(&MsgMsg,NULL,0,0),NULL,0,0)/截获加速键消息截获加速键消息 if(!if(!TranslateAcceleratorTranslateAccelerator(hwndhwnd,hAccelhAccel,&,&MsgMsg)TranslateMessageTranslateMessage(&(&MsgMsg););DispatchMessageDispatchMessage(&(&MsgMsg););return Msg.return Msg.wParamwParam;

40、加载加加载加速键资速键资源源LRESULT CALLBACK WndProc(HWND hwnd,UINT message,LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)WPARAM wParam,LPARAM lParam)switch(message)switch(message)case WM_COMMAND:case WM_COMMAND:/处理菜单消息处理菜单消息 switch(LOWORD(wParam)switch(LOWORD(wParam)case IDM_NEW:cas

41、e IDM_NEW:break;break;case IDM_OPEN:case IDM_OPEN:break;break;case IDM_SAVE:case IDM_SAVE:break;break;case IDM_SAVEAS:case IDM_SAVEAS:break;break;case IDM_CLOSE:case IDM_CLOSE:break;break;case IDM_ADDPRINTMENU:case IDM_ADDPRINTMENU:hmenuhmenu=GetMenuGetMenu(hwndhwnd);/);/获取主菜单句柄获取主菜单句柄 hprintmenuhpr

42、intmenu=CreateMenuCreateMenu();/();/动态创建菜单动态创建菜单 AppendMenuAppendMenu(hprintmenuhprintmenu,MF_ENABLED,IDM_LINE,MF_ENABLED,IDM_LINE,求和求和););AppendMenuAppendMenu(hprintmenuhprintmenu,MF_ENABLED,IDM_RECT,MF_ENABLED,IDM_RECT,方差方差););AppendMenuAppendMenu(hprintmenuhprintmenu,MF_ENABLED,IDM_RRECT,MF_ENABL

43、ED,IDM_RRECT,平均值平均值););AppendMenuAppendMenu(hprintmenuhprintmenu,MF_ENABLED,IDM_ELLIP,MF_ENABLED,IDM_ELLIP,“均方根均方根”););InsertMenu(hmenu,2,MF_POPUP|MF_BYPOSITION,InsertMenu(hmenu,2,MF_POPUP|MF_BYPOSITION,(UINT)(UINT)hprintmenuhprintmenu,统计计算统计计算(&(&C);C);EnableMenuItemEnableMenuItem(hmenuhmenu,IDM_AD

44、DPRINTMENU,MF_GRAYED);,IDM_ADDPRINTMENU,MF_GRAYED);EnableMenuItemEnableMenuItem(hmenuhmenu,IDM_DELPRINTMENU,MF_ENABLED);,IDM_DELPRINTMENU,MF_ENABLED);DrawMenuBarDrawMenuBar(hwndhwnd);/);/重新显示窗口菜单重新显示窗口菜单 break;break;增加菜增加菜单项单项添加弹添加弹出式统出式统计计算计计算菜单菜单将创建的将创建的弹出式菜弹出式菜单插入主单插入主菜单中菜单中改变改变“统计统计计算计算”菜单菜单项的属性

45、项的属性 case IDM_DELPRINTMENUcase IDM_DELPRINTMENU:/:/从主菜单中删除弹出式统计计算菜单从主菜单中删除弹出式统计计算菜单 DeleteMenu(hmenu,2,MF_BYPOSITION);/DeleteMenu(hmenu,2,MF_BYPOSITION);/删除统计计算菜单项删除统计计算菜单项 EnableMenuItemEnableMenuItem(hmenuhmenu,IDM_ADDPRINTMENU,MF_ENABLED);,IDM_ADDPRINTMENU,MF_ENABLED);EnableMenuItemEnableMenuItem

46、(hmenuhmenu,IDM_DELPRINTMENU,MF_GRAYED);,IDM_DELPRINTMENU,MF_GRAYED);DrawMenuBarDrawMenuBar(hwndhwnd););/重新显示窗口菜单重新显示窗口菜单break;break;case IDM_EXITcase IDM_EXIT:/:/选择选择“退出退出”时,发出时,发出WM_DESTROYWM_DESTROY消息消息SendMessage(hwnd,WM_DESTROY,0,0);SendMessage(hwnd,WM_DESTROY,0,0);break;break;case IDM_CUTcase

47、IDM_CUT:break;break;case IDM_COPYcase IDM_COPY:break;break;case IDM_PASTEcase IDM_PASTE:break;break;case IDM_DELETEcase IDM_DELETE:break;:break;break;break;改变改变“文件文件”菜单中有关菜单中有关“统计计算统计计算”菜单项的属性菜单项的属性 case WM_DESTROY:case WM_DESTROY:PostQuitMessage(0);break;PostQuitMessage(0);break;default:default:ret

48、urn DefWindowProc(hwnd,message,wParam,lParam);return DefWindowProc(hwnd,message,wParam,lParam);return 0;return 0;对应对应case WM_COMMANDcase WM_COMMAND菜单消息菜单消息本例菜单资源文件中的部分内容本例菜单资源文件中的部分内容MENU MENU DISCARDABLE MENU MENU DISCARDABLE BEGINBEGIN POPUP POPUP 文件文件(&(&F)F)BEGIN BEGIN MENUITEM MENUITEM 新建新建(&(&

49、N)t Ctrl+N,IDM_NEWN)t Ctrl+N,IDM_NEW MENUITEM MENUITEM 打开打开(&(&O)t Ctrl+O,IDM_OPENO)t Ctrl+O,IDM_OPEN MENUITEM MENUITEM 关闭关闭(&(&C),IDM_CLOSEC),IDM_CLOSE MENUITEM SEPARATOR MENUITEM SEPARATOR MENUITEM MENUITEM 保存保存(&(&S)t Ctrl+S,IDM_SAVES)t Ctrl+S,IDM_SAVE MENUITEM MENUITEM 另存为另存为(&(&A),IDM_SAVEASA),

50、IDM_SAVEAS MENUITEM SEPARATOR MENUITEM SEPARATOR MENUITEM MENUITEM 创建统计计算菜单项创建统计计算菜单项(&(&P)t Ctrl+P,IDM_ADDPRINTMENUP)t Ctrl+P,IDM_ADDPRINTMENU MENUITEM MENUITEM删除统计计算菜单项删除统计计算菜单项(&(&D)D)tCtrltCtrl+D,IDM_DELPRINTMENU,GRAYED+D,IDM_DELPRINTMENU,GRAYED MENUITEM SEPARATOR MENUITEM SEPARATOR MENUITEM MEN

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁