07_resource_sdk 可视化编程 windows编程.ppt
《07_resource_sdk 可视化编程 windows编程.ppt》由会员分享,可在线阅读,更多相关《07_resource_sdk 可视化编程 windows编程.ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7章章资源在资源在Windows编程中编程中的应用的应用加速键加速键对话框对话框位图位图资源光标光标菜单菜单工具条工具条字符串字符串17.1菜单和加速键资源及其应用 菜单由以下组成部分:菜单由以下组成部分:(1)窗口主菜单条窗口主菜单条(2)下拉式菜单框下拉式菜单框(3)菜单项热键标识菜单项热键标识(4)菜单项加速键标识菜单项加速键标识(5)菜单项分隔线菜单项分隔线27.1.1菜单的创建过程菜单的创建过程(1)(1)定义菜单定义菜单菜单在资源描述文件中的定义形式为:菜单在资源描述文件中的定义形式为:menuID MENU,menuID MENU,载入特性载入特性选项选项菜单项列表菜单项列表
2、 字符串,或字符串,或165535之之间的整数间的整数选选 项项说说 明明DISCARDABLE DISCARDABLE 当不再需要菜单时可丢弃当不再需要菜单时可丢弃FIXEDFIXED 将菜单保存在内存中的固定位置将菜单保存在内存中的固定位置LOADONCALLLOADONCALL需要时加载菜单需要时加载菜单MOVEABLEMOVEABLE菜单在内存中可移动菜单在内存中可移动PRELOADPRELOAD立即加载菜单立即加载菜单POPUP语句语句MENUITEM语句语句3POPUP语句定义弹出式菜单,其形式为:语句定义弹出式菜单,其形式为:POPUP POPUP 菜单项名菜单项名,选项,选项;
3、在菜单项名中加入符号在菜单项名中加入符号“&”,以定义热键,以定义热键定义弹出式菜单项定义弹出式菜单项“编辑编辑”的形式如下:的形式如下:POPUP“POPUP“编辑(编辑(&E&E)”;选选 项项说说 明明MENUBARBREAKMENUBARBREAK菜单项纵向分隔标志菜单项纵向分隔标志CHECKEDCHECKED显示选中标志显示选中标志INACTIVEINACTIVE禁止一个菜单项禁止一个菜单项GRAYEDGRAYED禁止并变灰显示禁止并变灰显示4MENUITEM用于定义菜单项,其形式为:用于定义菜单项,其形式为:MENUITEM MENUITEM 菜菜单单项项名名菜菜单单项项标标识识(
4、IDID),选项选项 ID为为菜菜单单项项标标识识,在在WM_COMMAND消消息息中中字字参参数数wParam中中包包含含选选中中菜菜单单项项的的标标识识。每每个个菜菜单单项项的的标标识识必必须须唯唯一一,标标识识值值常常在在头文件中定义。头文件中定义。如:创建菜单中的水平分隔符:如:创建菜单中的水平分隔符:MENUITEMSEPARATOR5该菜单在资源描述文件中的定义如下:该菜单在资源描述文件中的定义如下:#include#includeMenu.h菜单定义菜单定义My_menuMENUMOVEABLEPOPUP POPUP 文件(文件(&F&F)MENUITEM MENUITEM 新建
5、(新建(&N&N),IDM_NEWIDM_NEW MENUITEM MENUITEM 打开(打开(&O&O),IDM_OPENIDM_OPEN MENUITEM MENUITEM 关闭(关闭(&C&C),IDM_CLOSEIDM_CLOSE MENUITEM MENUITEM 保存(保存(&S&S),IDM_SAVEIDM_SAVE MENUITEM MENUITEM 另存为(另存为(&A&A),IDM_SAVEASIDM_SAVEAS MENUITEM MENUITEM SEPARATOR SEPARATOR MENUITEMMENUITEM“退出(退出(&X&X)”,IDM_EXITIDM
6、_EXIT 6menu.h menu.h 文文件件中中定定义义了了菜菜单单项项标标识识所所对对应应的的数值:数值:#define IDM_NEW#define IDM_NEW 1010#define IDM_OPEN#define IDM_OPEN 1111#define IDM_CLOSE#define IDM_CLOSE 1212#define IDM_SAVE#define IDM_SAVE 1313#define IDM_SAVEAS#define IDM_SAVEAS 1414#define IDM_EXIT#define IDM_EXIT 15157(2)加载菜单资源加载菜单资源在
7、窗口类中加载菜单在窗口类中加载菜单在创建窗口时加载菜单在创建窗口时加载菜单动态加载菜单动态加载菜单WNDCLASSwndclass;wndclass.lpszMenuName=lpszMenuName;HWNDhwnd;HMENUhmenu;hmenu=LoadMenu(hlnstance,My_menu);hwnd=CreateWindow(,hmenu,););hmenu2=LoadMenu(hlnstance,Menu2);SetMenu(hwnd,hmenu2);87.1.2操作菜单项 1禁止或激活菜单项禁止或激活菜单项BOOL EnableMenuItemBOOL EnableMen
8、uItem(HMENU hmenu,(HMENU hmenu,UlNT wIDEnableItem,/UlNT wIDEnableItem,/被禁止或激活的菜单项标识被禁止或激活的菜单项标识 UINT dwEnableUINT dwEnable)据据dwEnable的取值,可为的取值,可为菜单项的菜单项的ID值,也为该菜值,也为该菜单项在菜单中位置单项在菜单中位置标标识识说说明明MF_BYCOMMAND以以ID值标识菜单项值标识菜单项MF_ENABLED激活菜单项激活菜单项MF_BYPOSITION 表明以位置标识菜单项表明以位置标识菜单项MF_GRAYED禁止菜单项并使其变灰显示禁止菜单项并
9、使其变灰显示MF_DISABLED禁止菜单项禁止菜单项92.2.设置或取消选中标志设置或取消选中标志DWORD CheckMenuItemDWORD CheckMenuItem(HMENU HMENU hmenuhmenu,UINT wIDCheckItem,UINT wIDCheckItem,/菜单项标识菜单项标识UINT dwCheckUINT dwCheck/操作标识操作标识)标标识识说说明明MF_CHECKED添加选中标志添加选中标志MF_UNCHECKED 删除选中标志删除选中标志103.3.增加菜单项增加菜单项(1)(1)在菜单的尾部增加菜单项在菜单的尾部增加菜单项BOOL App
10、endMenuBOOL AppendMenu(HMENU hmenu,(HMENU hmenu,UINT dwFlags,UINT dwFlags,/新加入的菜单项类型标识新加入的菜单项类型标识 UINT dwIDNewItem,UINT dwIDNewItem,/新加入菜单项的新加入菜单项的IDID LPCTSTR lpNewItem LPCTSTR lpNewItem/新加入的菜单项内容新加入的菜单项内容)例如在例如在“文件文件”菜单的末尾增加一项菜单的末尾增加一项“关于关于”:AppendMenu(hmenu,MF_ENABLED,IDM_ABOUT,“AppendMenu(hmenu,
11、MF_ENABLED,IDM_ABOUT,“关于关于(&A)“)(&A)“);11(2)(2)在菜单中插入菜单项在菜单中插入菜单项调用函数调用函数InsertMenu在菜单中插入新的菜单在菜单中插入新的菜单BOOL InsertMenuBOOL InsertMenu(HMENU hmenu,(HMENU hmenu,/菜单句柄菜单句柄UINT wPosition,UINT wPosition,/指定新菜单项插入的位置指定新菜单项插入的位置UINT dwFlag,UINT dwFlag,/新加入的菜单项的信息新加入的菜单项的信息UINT dwIDNweItem,UINT dwIDNweItem,
12、/新加入的菜单项的标识新加入的菜单项的标识LPCTSTR lpNewItemLPCTSTR lpNewItem/新插入的菜单项的内容新插入的菜单项的内容)例例如如,在在“文文件件”菜菜单单的的“退退出出”项项之之前前加加入入“打打印印”菜单项;菜单项;InsertMenu(hmenu,IDM_EXIT,InsertMenu(hmenu,IDM_EXIT,MF_BYCOMMAND|MF_ENABLED,MF_BYCOMMAND|MF_ENABLED,IDM_PRINT,IDM_PRINT,打印(打印(&P&P)););124.4.删除菜单项删除菜单项调用函数调用函数DeleteMenu Dele
13、teMenu 删除菜单项:删除菜单项:BOOL DeleteMenuBOOL DeleteMenu(HMENU hmenu,HMENU hmenu,UINT wPosition,/UINT wPosition,/要删除的菜单项的位置要删除的菜单项的位置UINT dwFlagUINT dwFlag /对对wPositionwPosition的解释的解释 )例如,删除例如,删除“文件文件”菜单中的菜单中的“另存为另存为”菜单项:菜单项:DeleteMenu(hmenu,IDM_SAVEAS,MF_BYCOMMAND)DeleteMenu(hmenu,IDM_SAVEAS,MF_BYCOMMAND)
14、135.5.修改菜单项修改菜单项调用函数调用函数ModifyMenu修改菜单中的某个项;修改菜单中的某个项;BOOL ModifyMenu BOOL ModifyMenu(HMENU hmenu,(HMENU hmenu,UINT wPosition,UINT wPosition,/指定需修改的菜单项位置指定需修改的菜单项位置 UINT dwFlag,UINT dwFlag,UINT dwIDNweItem,UINT dwIDNweItem,/修改后菜单项的标识修改后菜单项的标识 LPCTSTR lpNewItemLPCTSTR lpNewItem/修改后的菜单项名修改后的菜单项名)例例如如:
15、修修改改“文文件件”菜菜单单中中“打打开开”项项为为“加加载载”项:项:ModifyMenu(hmenu,IDM_OPEN,MF_BYCOMMANModifyMenu(hmenu,IDM_OPEN,MF_BYCOMMAND,D,IDM_LOAD,IDM_LOAD,加载加载(&L)(&L);147.1.3 动态地创建菜单 动动态态地地创创建建菜菜单单可可以以使使系系统统资资源源更更加加节节省省,在应用程序中动态创建菜单分两个步骤:在应用程序中动态创建菜单分两个步骤:1调用函数调用函数CreateMenu创建空的弹出式菜单创建空的弹出式菜单HMENUCreateMenu(void)2调调用用函函数
16、数AppendMenu或或InsertMenu在在该该菜单中加入菜单项。菜单中加入菜单项。157.1.4加速键资源加速键资源加速键资源是常伴随菜单使用的一种非常有用加速键资源是常伴随菜单使用的一种非常有用的资源的资源(1)在资源描述文件中定义加速键资源在资源描述文件中定义加速键资源加速键名加速键名ACCELERATORS加速键标识(加速键标识(ID),),类型类型NOINVERT/使用加速键时,菜单项不高亮显示使用加速键时,菜单项不高亮显示ALTSHIFTCONTROL/组合键的组合方式组合键的组合方式16常用的加速键有两种形式:常用的加速键有两种形式:“char”,id例例如如:“文文件件”
17、菜菜单单中中“保保存存”项项的的加加速速键键可可定定义义为:为:“S”,IDM_SAVEnCode,idVIRTKEY使用虚拟键作为加速键。使用虚拟键作为加速键。例例如如将将F1键键定定义义为为“帮帮助助”菜菜单单项项的的加加速速键键,其其ID标识为标识为IDM_HELP,其形式如下:,其形式如下:VK_F1,IDM_HELP,VIRTKEY172加载加速键资源加载加速键资源调用函数调用函数LoadAccelerators加载加速键资源:加载加速键资源:HACCEL hAccelHACCEL hAccel;hAccel=LoadAcceleratorshAccel=LoadAccelerato
18、rs(hInstance,hInstance,/当前程序实例句柄当前程序实例句柄 lpAcceINamelpAcceIName/lpAccelName/lpAccelName为加速键表名为加速键表名);183翻译加速键翻译加速键翻译操作经常在应用程序的消息循环中进行翻译操作经常在应用程序的消息循环中进行:while(GetMessage(&Msg,NULL,0,0)if(!TranslateAccelerator(hwnd,hAccel,&Mag)TranslateMessage(&Msg);DispatchMessage(&Msg);函函数数TranslateAcceleratorTrans
19、lateAccelerator是是翻翻译译操操作作的的核核心心。其其作作用用是是对对照照加加速速键键表表,将将相相关关的的按按键键消消息息WM_KEYDOWNWM_KEYDOWN和和WM_KEYUP WM_KEYUP 翻翻译译成成WM_COMMAND WM_COMMAND 或或WM_SYSCOMMANDWM_SYSCOMMAND消消息息。其其特特点点是是将将翻翻译译后后的的消消息息直直接接发发往往窗窗口口,不不在在消息队列中等待。消息队列中等待。197.1.5 创建菜单资源实例【例例7-1】创建一个窗口菜单的构架,单击创建一个窗口菜单的构架,单击“创创建统计计算菜单项建统计计算菜单项”动态地创
20、建动态地创建“统计计算统计计算”菜单,之后,菜单,之后,“创建统计计算菜单项创建统计计算菜单项”变变成不可操作,而原先不可操作的成不可操作,而原先不可操作的“删除统计删除统计计算菜单计算菜单项项”变成可操作,执行变成可操作,执行“删删除统计计算菜单项除统计计算菜单项”菜单菜单命令删除命令删除“统计计算统计计算”菜菜单。单。20#include windows.h include windows.h#include 7_1.h#include 7_1.hHMENU hmenu,haddmenu;/HMENU hmenu,haddmenu;/定义菜单句柄定义菜单句柄LRESULT CALLBACK
21、 WndProc(HWND,UINT,WPARAM,LPARAM);LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(int WINAPI WinMain()ShowWindow(hwnd,nCmdShow);ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);UpdateWindow(hwnd);hAccel=LoadAccelerators(hInstance,lpszMenuName);hAccel=LoadAccelerators(hInstance,lpszM
22、enuName);while(GetMessage(&Msg,NULL,0,0)while(GetMessage(&Msg,NULL,0,0)/在消息循环中截获加速键消息在消息循环中截获加速键消息if(!TranslateAccelerator(hwnd,hAccel,&Msg)if(!TranslateAccelerator(hwnd,hAccel,&Msg)TranslateMessage(&Msg);TranslateMessage(&Msg);DispatchMessage(&Msg);DispatchMessage(&Msg);return Msg.wParam;return Msg
23、.wParam;21LRESULT CALLBACK WndProc()switch(message)case WM_COMMAND:switch(LOWORD(wParam)case IDM_ADDMENU:/在主菜单中添加弹出式菜单在主菜单中添加弹出式菜单 hmenu=GetMenu(hwnd);/获取主菜单句柄获取主菜单句柄 haddmenu=CreateMenu();/动态创建菜单动态创建菜单 /在创建的菜单中增加菜单项在创建的菜单中增加菜单项 AppendMenu(haddmenu,MF_ENABLED,IDM_qiuhe,求和求和);AppendMenu(haddmenu,MF_E
24、NABLED,IDM_fangcha,“方差方差”);AppendMenu(haddmenu,MF_ENABLED,IDM_pinjunzhi,平均值平均值);AppendMenu(haddmenu,MF_ENABLED,IDM_junfanggen,均方根均方根);/将创建的弹出式菜单插入主菜单中将创建的弹出式菜单插入主菜单中 InsertMenu(hmenu,2,MF_POPUP|MF_BYPOSITION,(UINT)haddmenu,统计计算统计计算(&C);/相应改变菜单中有关绘图统计计算菜单项的属性相应改变菜单中有关绘图统计计算菜单项的属性 EnableMenuItem(hmenu
25、,IDM_ADDMENU,MF_GRAYED);EnableMenuItem(hmenu,IDM_DELMENU,MF_ENABLED);DrawMenuBar(hwnd);/重新显示窗口菜单重新显示窗口菜单 break;22 case IDM_DELMENU:DeleteMenu(hmenu,2,MF_BYPOSITION);/删除统计计算菜单项删除统计计算菜单项 /相应改变相应改变“文件文件”菜单中有关统计计算菜单项的属性菜单中有关统计计算菜单项的属性 EnableMenuItem(hmenu,IDM_ADDMENU,MF_ENABLED);EnableMenuItem(hmenu,IDM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 07_resource_sdk 可视化编程 windows编程 07 _resource_sdk 可视化 编程 windows
限制150内