资源在Windows编程中的应用.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第6讲资源在Windows编程中的应用1加速键对话框位图资源光标菜单工具条字符串7.1菜单和加速键资源及其应用菜单由以下组成部分:(1)窗口主菜单条(2)下拉式菜单框(3)菜单项热键标识(4)菜单项加速键标识(5)菜单项分隔线27.1.1菜单的创建过程(1)定义菜单菜单在资源描述文件中的定义形式为:menuIDMENU[,载入特性选项]{菜单项列表}3字符串,或1~65535之间的整数选项说明DISCARDABLE当不再需要菜单时可丢弃FIXED将菜单保存在内存中的固定位置LOADONCALL需要时加载菜单MOVEABLE菜单在内存中可移动PRELOAD立即加载菜单POPUP语句MENUITEM语句POPUP语句定义弹出式菜单,其形式为:POPUP菜单项名[,选项];在菜单项名中加入符号“&”,以定义热键定义弹出式菜单项“编辑”的形式如下:POPUP“编辑(&E)”;4选项说明MENUBARBREAK菜单项纵向分隔标志CHECKED显示选中标志INACTIVE禁止一个菜单项GRAYED禁止并变灰显示MENUITEM用于定义菜单项,其形式为:MENUITEM菜单项名菜单项标识(ID)[,选项]ID为菜单项标识,在WM_COMMAND消息中字参数wParam中包含选中菜单项的标识。每个菜单项的标识必须唯一,标识值常在头文件中定义。如:创建菜单中的水平分隔符:MENUITEMSEPARATOR5该菜单在资源描述文件中的定义如下:#includewindows.h#includeMenu.h∥菜单定义My_menuMENUMOVEABLE{POPUP文件(&F){MENUITEM新建(&N),IDM_NEWMENUITEM打开(&O),IDM_OPENMENUITEM关闭(&C),IDM_CLOSEMENUITEM保存(&S),IDM_SAVEMENUITEM另存为(&A),IDM_SAVEASMENUITEMSEPARATORMENUITEM“退出(&X)”,IDM_EXIT}}6menu.h文件中定义了菜单项标识所对应的数值:……#defineIDM_NEW10#defineIDM_OPEN11#defineIDM_CLOSE12#defineIDM_SAVE13#defineIDM_SAVEAS14#defineIDM_EXIT15…7(2)加载菜单资源8在窗口类中加载菜单在创建窗口时加载菜单动态加载菜单WNDCLASSwndclass;…wndclass.lpszMenuName=lpszMenuName;HWNDhwnd;HMENUhmenu;…hmenu=LoadMenu(hlnstance,My_menu);hwnd=CreateWindow(…,hmenu,…);hmenu2=LoadMenu(hlnstance,Menu2);SetMenu(hwnd,hmenu2);…7.1.2操作菜单项1.禁止或激活菜单项BOOLEnableMenuItem(HMENUhmenu,UlNTwIDEnableItem,UINTdwEnable)92.设置或取消选中标志10DWORDCheckMenuItem(HMENUhmenu,UINTwIDCheckItem,//菜单项标识UINTdwCheck//操作标识)3.增加菜单项(1)在菜单的尾部增加菜单项BOOLAppendMenu(HMENUhmenu,UINTdwFlags,UINTdwIDNewItem,LPCTSTRlpNewItem)例如在“文件”菜单的末尾增加一项“关于”:AppendMenu(hmenu,MF_ENABLED,IDM_ABOUT,“关于(&A)“);11(2)在菜单中插入菜单项调用函数InsertMenu在菜单中插入新的菜单BOOLInsertMenu(HMENUhmenu,//菜单句柄UINTwPosition,//指定新菜单项插入位置UINTdwFlag,//新加入的菜单项的信息UINTdwIDNweItem,//新加入的菜单项的标识LPCTSTRlpNewItem//新插入的菜单项的内容)124.删除菜单项调用函数DeleteMenu删除菜单项:BOOLDeleteMenu(HMENUhmenu,UINTwPosition,//要删除的菜单项的位置UINTdwFlag//对wPosition的解释)135.修改菜单项调用函数ModifyMenu修改菜单中的某个项;BOOLModifyMenu(HMENUhmenu,UINTwPosition,//指定需修改的菜单项位置UINTdwFlag,UINTdwIDNweItem,//修改后菜单项的标识LPCTSTRlpNewItem//修改后的菜单项名)147.1.3动态地创建菜单动态地创建菜单可以使系统资源更加节省,在应用程序中动态创建菜单分两个步骤:1.调用函数CreateMenu创建空的弹出式菜单HMENUCreateMenu(void)2.调用函数AppendMenu或InsertMenu在该菜单中加入菜单项。157.1.4加速键资源加速键资源是常伴随菜单使用的一种非常有用的资源(1)在资源描述文件中定义加速键资源加速键名ACCELERATORS加速键标识(ID),[类型][NOINVERT]//使用加速键时,菜单项不高亮显示[ALT][SHIFT][CONTROL]//组合键的组合方式16常用的加速键有两种形式:①“^char”,id例如:“文件”菜单中“保存”项的加速键可定义为:“^S”,IDM_SAVE②nCode,idVIRTKEY使用虚拟键作为加速键。例如将F1键定义为“帮助”菜单项的加速键,其ID标识为IDM_HELP,其形式如下:VK_F1,IDM_HELP,VIRTKEY172.加载加速键资源调用函数LoadAccelerators加载加速键资源:…HACCELhAccel;…hAccel=LoadAccelerators(hInstance,//当前程序实例句柄lpAcceIName//lpAccelName为加速键表名);183.翻译加速键翻译操作经常在应用程序的消息循环中进行:while(GetMessage(&Msg,NULL,0,0)){if(!TranslateAccelerator(hwnd,hAccel,&Mag)){TranslateMessage(&Msg);DispatchMessage(&Msg);}}函数TranslateAccelerator是翻译操作的核心。其特点是将翻译后的消息直接发往窗口,不在消息队列中等待。197.1.5创建菜单资源实例【例7-1】创建一个窗口菜单的构架,单击“创建统计计算菜单项”动态地创建“统计计算”菜单,之后,“创建统计计算菜单项”变成不可操作,而原先不可操作的“删除统计计算菜单20项”变成可操作,执行“删除统计计算菜单项”菜单命令删除“统计计算”菜单。21#includewindows.h#include7_1.hHMENUhmenu,haddmenu;//定义菜单句柄LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);intWINAPIWinMain(……){……ShowWindow(hwnd,nCmdShow);UpdateWindow(hwnd);hAccel=LoadAccelerators(hInstance,lpszMenuName);while(GetMessage(&Msg,NULL,0,0)){//在消息循环中截获加速键消息if(!TranslateAccelerator(hwnd,hAccel,&Msg)){TranslateMessage(&Msg);DispatchMessage(&Msg);}}returnMsg.wParam;}22LRESULTCALLBACKWndProc(……){switch(message){caseWM_COMMAND:switch(LOWORD(wParam)){caseIDM_ADDMENU://在主菜单中添加弹出式菜单hmenu=GetMenu(hwnd);//获取主菜单句柄haddmenu=CreateMenu();//动态创建菜单//在创建的菜单中增加菜单项AppendMenu(haddmenu,MF_ENABLED,IDM_qiuhe,求和);AppendMenu(haddmenu,MF_ENABLED,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,IDM_ADDMENU,MF_GRAYED);EnableMenuItem(hmenu,IDM_DELMENU,MF_ENABLED);DrawMenuBar(hwnd);//重新显示窗口菜单break;23caseIDM_DELMENU:DeleteMenu(hmenu,2,MF_BYPOSITION);//删除统计计算菜单项//相应改变“文件”菜单中有关统计计算菜单项的属性EnableMenuItem(hmenu,IDM_ADDMENU,MF_ENABLED);EnableMenuItem(hmenu,IDM_DELMENU,MF_GRAYED);DrawMenuBar(hwnd);//重新显示窗口菜单break;caseIDM_EXIT:SendMessage(hwnd,WM_DESTROY,0,0);break;}break;caseWM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hwnd,message,wParam,lParam);}return0;}本例程的头文件如下:#defineIDM_ADDMENU15#defineIDM_DELMENU16#defineIDM_EXIT17#defineIDM_HELP22#defineIDM_qiuhe23#defineIDM_fangcha24#defineIDM_pinjunzhi25#defineIDM_junfanggen2624本例程用到的资源文件源代码如下:#includec:\prog_book\7_1\7_1.h#includewindows.hMenuMENUDISCARDABLEBEGINPOPUP文件(&F)BEGINMENUITEM创建统计计算菜单项(&P)\tCtrl+P,IDM_ADDMENUMENUITEM删除统计计算菜单项(&D)\tCtrl+D,IDM_DELMENU,GRAYEDMENUITEMSEPARATORMENUITEM退出(&X),IDM_EXITENDMENUITEM帮助(&H),IDM_HELPENDMenuACCELERATORSMOVEABLEPUREBEGIN^P,IDM_ADDMENU,ASCII^D,IDM_DELMENU,ASCIIEND257.2位图资源及其应用267.2.1位图概念位图是一种数字化的图形表示形式,位图中的每个像素点由位图文件中的一位或多位数据表示。整个位图的信息被细化为每个像素点的属性值277.2.2位图的操作过程位图操作过程:•定义位图句柄:HBITMAPhBm;•加载或创建hBm=LoadBitmap(hInstance,lpszName)hBm=CreateCompatibleBitmap(hdc,nWidth,nHeight)•选入内存设备环境SelectObject(hdcmem,hBm

1 / 52
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功