第12章_Windows中的资源_第1页
第12章_Windows中的资源_第2页
第12章_Windows中的资源_第3页
第12章_Windows中的资源_第4页
第12章_Windows中的资源_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1 第12章Windows中的资源 本章介绍的资源是指 图标 游标 字符串 菜单 对话框 点阵图 字体等 本章介绍了资源 资源 程序 文件 资源编辑器 资源编译器 资源描述文件 并通过Windows应用程序的编译过程来理解这些概念 2 12 1资源描述文件与模块定义文件 要真正理解资源 资源源 程序 文件 资源编辑器 资源编译器 资源描述文件 模块定义文件以及它们之间的相互关系 最好的办法是通过3 1 3节中用过的 编译系统全过程框图 来理解 3 12 1 1有关 资源 模板 的基本概念 资源是指 图标 游标 字符串 菜单 对话框 点阵图和字体等 硬件资源 把计算机中的一个部件 器件 组件等称为计算机的硬件资源软件资源 把Windows操作系统中的软部件称为软件资源资源源程序有 ASCII码形式 二进制形式两种ASCII码形式称为正文形式 例如 文件名后缀 ICO CUR BMP FNT DLG都是资源文件 4 12 1 2资源描述文件 RC 请见 5 12 1 2资源描述文件 RC 6 12 1 3模块定义文件 DEF 模块定义文件用来定义应用程序的模块名和模块属性 执行文件名又称为模块名 模块定义文件的格式如下 NAMEAbout1DISCRIPTIONThisisasimpleapplicationEXETYPEWindowsSTUBWINSTUB EXECODEMoveableDiscardableDATAMoveableMultipleHEAPSIZE1024STACKSIZE5120EXPORTSWndProc 7 12 2图标的基本概念 Windows的资源图标 游标 滚动条 菜单和对话框等都是Windows界面的重要组成部件 它们称为Windows的资源 程序的代码不能直接存取资源变量当应用程序要用资源的时候 用Windows提供的函数直接或间接地把它们载入内存以后 应用程序才能使用 LoadIcon 和LoadCursor 从磁盘中载入资源并返回指向资源的代号 8 12 2 1概述 Windows中有两种图标内建图标 一般都是二进行文件 自制图标 一般是正文文件 ASCII码文件 1 内建图标Windows提供了一些内建图标 如下所示 2 自制图标 9 12 2 5LoadIcon返回图标代号 hIcon LoadIcon hInstance MAKEINTRESOURCE IDI ICON 返回值HICON类型的值 即图标的代号 第一个参数是执行实体代号 它指出资源的来源 这里hInstance表示它来自程序自己的 EXE文件 第二个参数是图标名 用字符串或ID号识别 10 12 2 6在应用程序中使用图标 大部分Windows程序仅在WNDCLASS结构的图标条款填入图标 用RegisterClass 函数注册窗口类时指定这个图标 Windows在显示图标图像时 它会在图标文件中自动选择最合适的图像大小 intWINAPIWinMain WNDCLASSwndclass 窗口类变量wndclass style CS HREDRAW CS VREDRAW wndclass lpfnWndProc WndProc 指向窗口函数wndclass hInstance hInstance 指向实例代号wndclass hIcon LoadIcon hInstance szAppName 图标wndclass hCursor LoadCursor NULL IDC ARROW if RegisterClass wndclass 11 1 用SetClassLong GetClassLong动态地更改程序的图标 HICONhIcon LoadIcon hInstance MAKEINTRESOURCE IDI ALTICON SetClassLong hwnd GCL HICON hIcon GetClassLong hwnd GCL HICON 返回指向hwnd窗口中的图标指针 12 12 3在程序中使用定制光标 在程序中使用定制的鼠标游标与使用定制的图标相似 只是大多数程序编程人员总是使用Windows提供的游标 定制游标一般为单色 大小为32 32像素 在DeveloperStudio中建立游标与建立图标的方法相同 从 Insert 菜单上选择 Resource 然后单击 Cursor 但不要忘记定义热点 13 12 3 1在窗口类中设置游标 wndclass HCursor LoadCursor hInstance MAKEINTRESOURCE IDC CURSOR 如果游标用字符串命名的 则为 wndclass HCursor LoadCursor hInstance szCursor intWINAPIWinMain WNDCLASSwndclass 窗口类变量wndclass style CS HREDRAW CS VREDRAW wndclass lpfnWndProc WndProc 指向窗口函数wndclass hInstance hInstance 指向实例代号wndclass hIcon LoadIcon hInstance szAppName 图标wndclass hCursor LoadCursor NULL IDC ARROW if RegisterClass wndclass 14 12 3 2用SetClassLong设置子窗口中的游标 可以使用以下方法改变窗口类的hCursor条款 HCURSORhCursor LoadCursor hInstance TEXT childcursor SetClassLong hwndChild GCL HCURSOR hCursor HwndChild 子窗口的代号 GCL HCURSOR SetClassLong函数的功能识别字 LoadCursor hInstance TEXT childcursor 载入图标的函数hInstance 图标所在的实例代号 TEXT childcursor hInstance实例代号指出的应用程序上的图标 SetClassLong函数的功能是把 childcursor 图标设置到子窗口的窗口类条款上 15 12 3 3用SetCursor改变窗口中的游标 如果您将显示区域划分为较小的逻辑区域而不使用子窗口 就可以使用SetCursor来改变鼠标游标 SetCursor hCursor 16 12 4字符串资源及其应用 字符串资源 主要目的是为了让程序转换成其他语言时更为方便 如果使用字符串资源而不是将字符串直接放入源代码中 那么程序所使用的所有字符串将在资源描述文件中用BEGIN END括起来的说明 这个说明称为字符串表资源模板 17 12 4 1基本概念 在资源描述文件中 字符串资源模板是一个多行的申明 每行说明一个字符串 如下所示 STRINGTABLEDISCARDABLE 说明字符串表 必要时可以舍弃BEGINIDS STRING1 characterstring1 IDS STRING2 characterstring2 其他字符串定义END一行字符串申明包括两个部分左部是字符串资源的标识 是字符串的ID 它唯一地代表字符串 右部是真正的字符串 字符串加载函数 LoadString hInstance id szBuffer MaxLength 18 12 4 2使用字符串资源的程序段 请见教材程序 12 使用字符串资源的程序段 doc 19 12 5菜单 菜单 是用户介面中非常重要的部分 开机以后 点击开始图标 就能拉出一个菜单菜单项 菜单有许多条目组成 这些条目又称选择项或菜单项 用鼠标点击其中一个菜单项 如果这个菜单项是弹出菜单项就能弹出一个下拉式菜单 如果菜单项不是弹出菜单项 点击这个菜单项 就能实现某种规定的工作 Windows的界面中如果菜单项用带 的文字表示 点击这个菜单项就能拉出对话框 20 12 5 1菜单概念 应用程序只要在窗口类的菜单条款中填入菜单名 应用程序的窗口就有菜单图标窗口的菜单图标紧接在标题栏的左方 每个菜单至少有一个菜单项所组成菜单项又分成两种能弹出菜单的菜单项 称为弹出菜单项或下拉式菜单项不能弹出菜单的菜单项 21 12 5 2菜单代号 菜单项ID与菜单ID 菜单名 菜单项ID菜单项有三个特性 菜单项的名 它可以是字符串或点阵图 菜单项的ID 菜单的属性 是否被禁用 无效化 被选择 22 12 5 3如何在程序中引用菜单 填写窗口类条款时指定系统菜单wndclass style CS HREDRAW CS VREDRAW wndclass lpfnWndProc WndProc wndclass lpszClassName szClassName wndclass hInstance hInstance wndclass hIcon NULL wndclass hCursor LoadCursor NULL IDC ARROW wndclass hbrBackground CreateSolidBrush RGB 160 190 160 wndclass lpszMenuName MAKEINTRESOURCE IDR MAINMENU wndclass cbClsExtra 0 wndclass cbWndExtra 0 if RegisterClass wndclass 23 12 5 3如何在程序中引用菜单 填写窗口类条款时指定系统菜单在应用程序中使用函数指定菜单HMENUhMenu LoadMenu hInstance MAKEINTRESOURCE ID MENU hWnd CreateWindow szClassName TEXT 我的第N个程序 WS OVERLAPPEDWINDOW CW USEDEFAULT CW USEDEFAULT CW USEDEFAULT CW USEDEFAULT NULL hMenu hInstance NULL 在窗口建立后用SetMenu 函数为窗口设定菜单 SetMenu hWnd hMenu 24 12 5 4和菜单有关的窗口消息 WM INITMENU消息 功能是初始化菜单 wParam 顶层菜单代号 句柄 lParam 0WM MENUSELECT消息 LOWORD wParam 菜单项IDHIWORD wParam 选择识别字lParam 被选择菜单项下一级菜单的菜单代号WM INITMENUPOPUP 准备显示一个下拉式菜单wParam 下拉式菜单代号LOWORD lParam 下拉式菜单索引HIWORD lParam 系统菜单为1 其它为0 25 12 5 4和菜单有关的窗口消息 WM COMMAND消息 用户已经点击了某菜单项wParam HIWORD wParam 0LOWORD wParam 菜单IDlParam 0caseWM COMMAND switch LOWORD wParam caseIDM OPEN caseIDM EXIT PostQuitMessage 0 break 26 12 5 5上机练习 About1 c 最简单的模式对话框程序 P307 前景颜色的菜单控制 27 1 解读MenuDemo应用程序 请见教材程序 12 解读MenuDemo应用程序 doc 28 12 5 6建立菜单的另一种方法 方法是使用CreateMenu和AppendMenu两个函数直接在 C程序中建立 建立菜单的另一种方法程序段请见教材程序 12 建立菜单的另一种方法程序段 doc 29 12 5 7在客户区范围内任意处可以启动的下拉式菜单 1 例程POPMENU C请见 教材程序 12 12 6POPMENU doc 30 12 5 8系统菜单 在系统菜单中增加的命令 菜单项 其ID值必须小於0 xF000 否则它们将会与Windows系统菜单命令所使用的ID值相冲突 还要记住 当您为系统菜单中的菜单项在窗口函数的WM SYSCOMMAND消息分支处理时 必须把其他要WM SYSCOMMAND消息分支处理的事情送给DefWindowProc处理 如果您不这样做 那么实际上是禁用了系统菜单上的所有正常选项 31 12 5 9用于改变菜单的函数 AppendMenu在菜单尾部添加新菜单项DeleteMenu删除菜单中一个现有的菜单项 并清除该项目InsertMenu在菜单中插入一个新菜单项ModifyMenu修改一个现有的菜单项RemoveMenu从菜单中移走某一菜单项 32 12 5 10处理菜单的其他函数 DrawMenuBar hwnd GetSubMenu hMenu iPosition GetMenuItemCount hMenu GetMenuItemIDCheckMenuItem hMenu id iCheck EnableMenuItem函数HiliteMenuItemGetMenuString hMenu id pString iMaxCount iFlag GetMenuState hMenu id iFlag DestroyMenu hMenu 33 12 6加速键 加速键通常是由键盘上的Ctrl Shift Alt 再加上一个虚拟键码组成 例如 Ctrl C那就是COPY功能的加速键 单独桉动加速键中的Ctrl Shift Alt 不会起作用 这个键称为 死键 只有组合成加速键的每个键都同时桉下 才能起作用 加速键的作用可以替代菜单中菜单项的作用 34 12 6 1为什么用加速键来实现菜单项功能而不直接用 键 来实现 对於有多个窗口或多个窗口函数的应用程序来说 应用加速键实现菜单功能就显得更为重要 因为使用了TranslateAccelerator函数 使得加速键隶属于某个特定的窗口这的怎么实现的呢 原来TranslateAccelerator的一个参数用于加速键所使用于的窗口的窗口代号 这意味著这个参数把加速键和窗口的窗口函数捆绑在一起 TranslateAccelerator只对具有加速键的窗口起作用 35 12 6 2安排加速键的几条规则 请见教材程序 12 安排加速键的几条规则 doc 36 12 6 3加速键的实施步骤 必须按照下面三步进行 1 在 RC文件中建立ACCELERATORS资源模板2 把加速键表载入应用程序内存3 修改应用程序消息循环 37 12 6 4加速键表模板 请见教材程序 12 加速键表模板 doc 38 12 6 5用DeveloperStudio生成加速键表模板 DeveloperStudio生成加速键表时 为了载入加速键表更为容易 建议加速键表和程序名用相同的名称 39 12 6 6加速键表的载入 请见教材

温馨提示

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

评论

0/150

提交评论