windows编程技术第12章-Windows中的资源_第1页
windows编程技术第12章-Windows中的资源_第2页
windows编程技术第12章-Windows中的资源_第3页
windows编程技术第12章-Windows中的资源_第4页
windows编程技术第12章-Windows中的资源_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、windows编程技术第12章-Windows中的资源第12章 Windows中的资源资源是Windows应用程序用户界面的重要组成部分,菜单、快捷键、图标、光标、对话框和字符串等都是不同的资源类型。资源的使用极大地方便了Windows应用程序的界面设计。资源是数据,在程序运行是通过调用API函数装入内存,也可以随时从内存中释放资源和资源脚本文件菜单和快捷键资源图标、光标和字符串资源对话框12.1.2 资源和资源脚本文件资源也是一种数据,他们在资源脚本文件RC(文本文件,以.RC为文件扩展名)中定义了应用程序所需的数据,即菜单、对话框、图标等资源数据。例如:Myhouse Icon 在磁盘上的

2、在磁盘上的关键词关键词可在主程序中使用的图标名可在主程序中使用的图标名Windows应用程序生成过程关于资源的生成关于资源的生成C(C+)语言编译器.C(C+).H.OBJ.DEF.LIBTLINK链接器.ICO.CUR.BMP.FNT.DLG资源编辑器.RC资源描述文件(文本文件)资源编译器.RES(二进制文件)资源链接器.EXE可执行文件(应用程序).EXE集成编译链接12.2 图标资源图标、光标(游标)本质上都是位图,只不过它们都被限制了一定的尺寸,分别被用在不同的地方。字符串也是一种资源类型,它给程序提供了另外一种输出文本字符串的方法。内建图标StopIDI_HAND?IDI_QUES

3、TION!IDI_EXCLAMATION*IDI_ASTERISK12.2.2 图标应用的基本方法Windows 202X应用程序支持三种不同的图标尺寸:256色(48X48)、32色(32X32)和16色(16X16)图标。在应用程序最小化时,小图标显示在应用程序窗口的左上角;大图标用于桌面图标或大图标试图中。三种图标都使用同一个标识符或者名称,系统直到把不同的尺寸的图标用在何处。步骤:在资源脚本文件中添加:IDI_MYICON ICON DISCARDABLE ”在主程序中加入:常用的方法WNDCLASS wndclass; = LoadIcon(hInstance,MAKEINTRESO

4、URCE(IDI_MYICON);其他方法:函数LoadImage也可以将图标资源装载到应用程序的窗口类,并且功能更强。 = LoadImage (hInstance, MAKEINSTRESOURCE( IDI_MYICON), IMAGE_CURSOR, 32, 32, LR_DEFAULTCOLOR) ;函数SetClassLong非常有用,它可以在程序执行期间,动态地更改窗口类指定的图标、光标、菜单甚至窗口过程等属性。DWORD SetClassLong(HWND hWnd,int nIndex,LONG dwNewLong);12.2.2 例题ICONDEMO涉及函数DrawIcon

5、(HDC hdc, int X, int Y, HICON hIcon) LoadIcon(hInstance, MAKEINTRESOURCE( IDI_ICON ) );打开源程序打开源程序12.2.3 大图表、小图标的应用涉及函数DrawIcon(HDC hdc, int X, int Y, HICON hIcon) LoadIcon(hInstance, MAKEINTRESOURCE( IDI_ICON ) );cxIcon = GetSystemMetrics(SM_CXICON);/取得图标的尺寸cyIcon = GetSystemMetrics(SM_CYICON); /取得图

6、标的尺寸大图标(32X32)会自动转换成小图标(16X16)一般地讲,Studio中建立一个32X32的大图标,大图标将自动在文件夹中显示,如果在标题栏中,则自动会把大图标缩成小图标(16X16)显示。为什么还要编辑一个小图标:由于大图标在自动转换成小图标,某些复杂的图标会失真,因此最好的办法是在建立一个小图标。打开源程序打开源程序12.3 使用自定义的光标系统提供了一些预定义的鼠标光标。标识符为IDC_ARROW,IDC_MOVE,IDC_WAIT或IDC_CROSS等。在资源脚本文件中,自定义光标的描述如下:IDC_MYCURSOR CURSOR DISCARDABLE “cursor1.

7、cur” 自定义的光标资源保存在文件(如cursor1.cur)中,在定义窗口类时,可以把自定义的光标设置为窗口类默认的光标。 = LoadCursor(hInstance, MAKEINTRESOURCE (IDC_MYCURSOR) );特别是在鼠标消息WM_MOUSEMOVE的处理期间,这个函数非常有用。case WM_MOUSEMOVE:hCursor = LoadCursor (hInst, MAKEINTRESOURCE( IDC_MYCURSOR ) );SetCursor(hCursor); 用SetClassLong设置窗口中的光标如果在运行过程中希望改变窗口内的默认光标,可

8、以用SetClassLong函数hCursor = LoadCursor(hInstance,TEXT(“childcursor”); / 其中SetClassLong(hwnd, GCL_HCURSOR, hCursor); 或 者 , 动 态 设 置 光 标 。 特 别 是 在 鼠 标 消 息WM_MOUSEMOVE的处理期间,这个函数非常有用。SetCursor(hCursor);例如:case WM_MOUSEMOVE:hCursor = LoadCursor (hInst, MAKEINTRESOURCE( IDC_MYCURSOR ) );SetCursor(hCursor);12

9、.4 使用字符串资源(自学)使用字符串资源,提供了一种完全不同的使用字符串的方法,字符串被放在资源脚本文件中。程序在需要它们时,通过每个字符串唯一的标识符来获得字符串。STRING TABLE DISCARDABLEBEGINGIDS_ERROR “错误:202Xnn由于某种原因,网页不能打开!” IDS_MESSAGE “我是超级链接”END LoadString将字符串数据从资源文件中复制到内存缓冲区。int LoadString(HINSTANCE hInstance,UINT uID,LPTSTR lpBuffer,int nBufferMax);图标、光标和字符串资源的应用实例(补充

10、) -演示图标、光标和字符串资源的使用(模拟网页中的超级链接)12.5 菜单和快捷键资源 12.5.1 菜单概念菜单是Windows图形用户界面中窗口的重要组成部分。使用菜单可以使用户了解并方便地使用应用程序提供的各项功能;使用快捷键资源可使菜单的操作更方便。三种菜单:主菜单,下拉式菜单,浮动式菜单菜单本质上是层次嵌套的。鼠标点击菜单项,则触发一个菜单事件,程序捕获该事件进行管理。12.5.2 菜单代号、菜单项ID与菜单ID 对下拉式菜单来说,可以拉出菜单名以及唯一标识该菜单项的ID。菜单项有三个特性菜单名,它可以是字符串或点阵图。菜单项的ID,单击菜单项时,Windows向包含菜单项的菜单所

11、在的窗口发送WM_COMMAND消息,LOWORD(wParam)是向应用程序窗口函数发送的下拉式菜单的代号(通知码)菜单项的属性,包括是否被禁用、无效化或被选择。12.5.3 在程序中引用菜单在创建菜单资源后,有三种方法可以实现菜单与程序窗口的关联:(1) 在窗口类中加载菜单 = lpMenuName;(2) 创建窗口时加载菜单HMENU LoadMenu(HINSTANCE hInstance, LPCTSTR lpMenuName); (3) 动态加载菜单应用程序窗口调用函数LoadMenu获取菜单句柄后,还可以通过调用函数SetMenu动态地加载菜单,以提高程序的灵活性。BOOL Se

12、tMenu(HWND hWnd, HMENU hMenu);12.5.4 和菜单有关的窗口消息WM_INITMENU当一个主菜单创建时,发出的消息。WM_MENUSELECT用户在菜单项中移动光标或者鼠标,应用程序会受到许多WM_MENUSELECT消息WM_INITMENUPOPUP准备显示一个弹出式下拉式菜单时,发送的消息。WM_COMMAND当用户选择一个菜单项时,Windows通常会向菜单所在的窗口函数发送WM_COMMAND消息,LOWORD(wParam)是菜单项的IDWM_MENUCHAR如果用户按下Alt键和一个与菜单项不匹配的字符时,或者在显示下拉式菜单时,用户按下一个与下拉

13、式菜单里的项目不匹配的字符键。WM_INITMENUWM_INITMENUPOPUPWM_MENUSELECTWM_INITMENUPOPUPWM_COMMANDWM_MENUSELECTWM_MENUSELECTWM_MENUSELECTWM_MENUSELECT其他菜单消息(参考) WM_SYSCOMMAND消息与WM_COMMAND消息类似,只不过它是用户选择系统菜单的菜单项时,发送到窗口过程的消息队列。WM_INITMENU是程序的顶层菜单和弹出式菜单被激活前的一瞬间发送到窗口过程。 wParam是顶层菜单的句柄。WM_INMENUPOPUP是弹出式菜单被激活前的一瞬间发送到窗口过程的

14、。wParam是弹出式菜单的句柄。LOWORD(lParam)是其在上一级菜单中的索引位。WM_CONTEXTMENU消息通知窗口用户单击了鼠标右键,并要求弹出浮动菜单。此消息的wParam是单击鼠标右键时所处窗口的句柄;lParam参数指明了消息产生时的鼠标位置(屏幕坐标),其中,低字节为水平坐标,高字节为竖向坐标。 菜单和菜单相关操作 通过资源编译器创建菜单资源很容易,用户只需为其窗键的菜单栏添加菜单项或者弹出式菜单,并给每个菜单项指定一个全局唯一的标识符(自定义或由编译器分配)以及菜单项标题。1 菜单资源的加载 2 菜单的动态创建 3 菜单项的属性 4 插入和删除菜单项资源文件中的菜单的

15、结构IDM_MYMENU1 MENU DISCARDABLE BEGIN POPUP 文件(&F) BEGIN MENUITEM 新建(&N)tCtrl+N, 100 MENUITEM 打开(&O).tCtrl+O, 101 MENUITEM 保存(&S).tCtrl+S, 102 MENUITEM SEPARATOR MENUITEM 文本模式(&T)tCtrl+T, 103 END POPUP 编辑(&E) BEGIN MENUITEM 撤销(&U)tCtrl+Z, 104 MENUITEM SEPARATOR ENDEND菜单的动态创建 HMENU CreateMenu(VOID);/创

16、建一个空菜单HMENU CreatePopupMenu(VOID);/创建空的弹出式菜单。(1) AppendMenu 在指定菜单的末尾加入一新的菜单项,可以指定该菜单项的内容、外观和行为等属性。(2) InsertMenuItem 在菜单的指定位置处插入一新菜单项菜单项的属性(参考)菜单项的禁止或者激活状态菜单项的选中或者取消选中状态菜单项显示的内容和标识符值(1) GetMenuState 返回指定菜单项的当前状态(2) EnableMenuItem 改变菜单项的激活、禁止和灰化状态(3) CheckMenuItem 用于选中或者取消选中菜单项,默认的选中状态是在菜单项的左边做一复选框选中

17、标记。(4) SetMenuItemInfo 通过设置MenuItemInfo结构,可以设置有关菜单项的所有状态、菜单项标题等信息。(5) GetMenuItemInfo 与函数SetMenuItemInfo对应,此函数用于获取菜单项相关的信息,如显示状态、选中状态、菜单项标题、标识符值等。插入和删除菜单项(参考)删除指定的菜单项十分容易:DeleteMenu(hSubMenu, IDM_FILE_EXIT, MF_BYCOMMAND);实现更复杂的菜单项(参考)1 位图菜单项位图菜单项hbmRed = LoadBitmap( hInst, MAKEINTRESOURCE (IDB_RED )

18、 );hPopSub = CreatePopupMenu三三;AppendMenu(hPopSub,MFT_BITMAP,IDM_COLOR_RED,(LPCTSTR)hbmRed); 2 自定义选中标记的菜单项自定义选中标记的菜单项BOOL SetMenuItemBitmaps(HMENU hMenu,UINT uPosition, UINT uFlags, HBITMAP hBitmapUnchecked,HBITMAP hBitmapChecked);12.5.5 菜单显示例程12.6 快捷(加速)键资源加速键加速键经常的,为了避免来回地使用鼠标和对菜单的选择,提出了随时利用一个简单的键

19、盘操作,以提高工作效率。12.6.4 加速(快捷)键表模板1 资源脚本文件中描述的快捷键IDR_MYACCELERATOR ACCELERATORS DISCARDABLE BEGIN E, IDM_DRAW_ELLIPSE, VIRTKEY, CONTROL, NOINVERT N, IDM_FILE_NEW, VIRTKEY, CONTROL, NOINVERT O, IDM_FILE_OPEN, VIRTKEY, CONTROL, NOINVERT Q, IDM_FILE_EXIT, VIRTKEY, CONTROL, NOINVERT R, IDM_DRAW_RECT, VIRTKEY, CONTROL, NOINVERT S, IDM_FILE_SAVE, VIRTKEY, CONTROL, NOINVERT T, IDM_FILE_TEXT, ASCII, NOINV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论