07_resource_sdk 可视化编程 windows编程.ppt_第1页
07_resource_sdk 可视化编程 windows编程.ppt_第2页
07_resource_sdk 可视化编程 windows编程.ppt_第3页
07_resource_sdk 可视化编程 windows编程.ppt_第4页
07_resource_sdk 可视化编程 windows编程.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1 第7章资源在Windows编程中的应用 加速键 对话框 位图 资源 光标 菜单 工具条 字符串 2 7 1菜单和加速键资源及其应用 菜单由以下组成部分 1 窗口主菜单条 2 下拉式菜单框 3 菜单项热键标识 4 菜单项加速键标识 5 菜单项分隔线 3 7 1 1菜单的创建过程 1 定义菜单菜单在资源描述文件中的定义形式为 menuIDMENU 载入特性选项 菜单项列表 字符串 或1 65535之间的整数 选项说明DISCARDABLE当不再需要菜单时可丢弃FIXED将菜单保存在内存中的固定位置LOADONCALL需要时加载菜单MOVEABLE菜单在内存中可移动PRELOAD立即加载菜单 POPUP语句MENUITEM语句 4 POPUP语句定义弹出式菜单 其形式为 POPUP 菜单项名 选项 在菜单项名中加入符号 以定义热键定义弹出式菜单项 编辑 的形式如下 POPUP 编辑 E 选项说明MENUBARBREAK菜单项纵向分隔标志CHECKED显示选中标志INACTIVE禁止一个菜单项GRAYED禁止并变灰显示 5 MENUITEM用于定义菜单项 其形式为 MENUITEM 菜单项名 菜单项标识 ID 选项 ID为菜单项标识 在WM COMMAND消息中字参数wParam中包含选中菜单项的标识 每个菜单项的标识必须唯一 标识值常在头文件中定义 如 创建菜单中的水平分隔符 MENUITEMSEPARATOR 6 该菜单在资源描述文件中的定义如下 include include Menu h 菜单定义My menuMENUMOVEABLE POPUP 文件 F MENUITEM 新建 N IDM NEWMENUITEM 打开 O IDM OPENMENUITEM 关闭 C IDM CLOSEMENUITEM 保存 S IDM SAVEMENUITEM 另存为 A IDM SAVEASMENUITEMSEPARATORMENUITEM 退出 X IDM EXIT 7 menu h文件中定义了菜单项标识所对应的数值 defineIDM NEW10 defineIDM OPEN11 defineIDM CLOSE12 defineIDM SAVE13 defineIDM SAVEAS14 defineIDM EXIT15 8 2 加载菜单资源 在窗口类中加载菜单 在创建窗口时加载菜单 动态加载菜单 WNDCLASSwndclass wndclass lpszMenuName lpszMenuName HWNDhwnd HMENUhmenu hmenu LoadMenu hlnstance My menu hwnd CreateWindow hmenu hmenu2 LoadMenu hlnstance Menu2 SetMenu hwnd hmenu2 9 7 1 2操作菜单项 1 禁止或激活菜单项BOOLEnableMenuItem HMENUhmenu UlNTwIDEnableItem 被禁止或激活的菜单项标识UINTdwEnable 据dwEnable的取值 可为菜单项的ID值 也为该菜单项在菜单中位置 标识说明MF BYCOMMAND以ID值标识菜单项MF ENABLED激活菜单项MF BYPOSITION表明以位置标识菜单项MF GRAYED禁止菜单项并使其变灰显示MF DISABLED禁止菜单项 10 2 设置或取消选中标志 DWORDCheckMenuItem HMENUhmenu UINTwIDCheckItem 菜单项标识UINTdwCheck 操作标识 标识说明MF CHECKED添加选中标志MF UNCHECKED删除选中标志 11 3 增加菜单项在菜单的尾部增加菜单项BOOLAppendMenu HMENUhmenu UINTdwFlags 新加入的菜单项类型标识UINTdwIDNewItem 新加入菜单项的IDLPCTSTRlpNewItem 新加入的菜单项内容 例如在 文件 菜单的末尾增加一项 关于 AppendMenu hmenu MF ENABLED IDM ABOUT 关于 A 12 2 在菜单中插入菜单项调用函数InsertMenu在菜单中插入新的菜单BOOLInsertMenu HMENUhmenu 菜单句柄UINTwPosition 指定新菜单项插入的位置UINTdwFlag 新加入的菜单项的信息UINTdwIDNweItem 新加入的菜单项的标识LPCTSTRlpNewItem 新插入的菜单项的内容 例如 在 文件 菜单的 退出 项之前加入 打印 菜单项 InsertMenu hmenu IDM EXIT MF BYCOMMAND MF ENABLED IDM PRINT 打印 13 4 删除菜单项调用函数DeleteMenu删除菜单项 BOOLDeleteMenu HMENUhmenu UINTwPosition 要删除的菜单项的位置UINTdwFlag 对wPosition的解释 例如 删除 文件 菜单中的 另存为 菜单项 DeleteMenu hmenu IDM SAVEAS MF BYCOMMAND 14 5 修改菜单项调用函数ModifyMenu修改菜单中的某个项 BOOLModifyMenu HMENUhmenu UINTwPosition 指定需修改的菜单项位置UINTdwFlag UINTdwIDNweItem 修改后菜单项的标识LPCTSTRlpNewItem 修改后的菜单项名 例如 修改 文件 菜单中 打开 项为 加载 项 ModifyMenu hmenu IDM OPEN MF BYCOMMAND IDM LOAD 加载 L 15 7 1 3动态地创建菜单 动态地创建菜单可以使系统资源更加节省 在应用程序中动态创建菜单分两个步骤 1 调用函数CreateMenu创建空的弹出式菜单HMENUCreateMenu void 2 调用函数AppendMenu或InsertMenu在该菜单中加入菜单项 16 7 1 4加速键资源 加速键资源是常伴随菜单使用的一种非常有用的资源 1 在资源描述文件中定义加速键资源加速键名ACCELERATORS加速键标识 ID 类型 NOINVERT 使用加速键时 菜单项不高亮显示 ALT SHIFT CONTROL 组合键的组合方式 17 常用的加速键有两种形式 char id例如 文件 菜单中 保存 项的加速键可定义为 S IDM SAVE nCode idVIRTKEY使用虚拟键作为加速键 例如将F1键定义为 帮助 菜单项的加速键 其ID标识为IDM HELP 其形式如下 VK F1 IDM HELP VIRTKEY 18 2 加载加速键资源调用函数LoadAccelerators加载加速键资源 HACCELhAccel hAccel LoadAccelerators hInstance 当前程序实例句柄lpAcceIName lpAccelName为加速键表名 19 3 翻译加速键翻译操作经常在应用程序的消息循环中进行 while GetMessage Msg NULL 0 0 if TranslateAccelerator hwnd hAccel Mag TranslateMessage Msg DispatchMessage Msg 函数TranslateAccelerator是翻译操作的核心 其作用是对照加速键表 将相关的按键消息WM KEYDOWN和WM KEYUP翻译成WM COMMAND或WM SYSCOMMAND消息 其特点是将翻译后的消息直接发往窗口 不在消息队列中等待 20 7 1 5创建菜单资源实例 例7 1 创建一个窗口菜单的构架 单击 创建统计计算菜单项 动态地创建 统计计算 菜单 之后 创建统计计算菜单项 变成不可操作 而原先不可操作的 删除统计计算菜单 项 变成可操作 执行 删除统计计算菜单项 菜单命令删除 统计计算 菜单 21 include windows h include 7 1 h HMENUhmenu haddmenu 定义菜单句柄LRESULTCALLBACKWndProc HWND UINT WPARAM LPARAM intWINAPIWinMain ShowWindow hwnd nCmdShow UpdateWindow hwnd hAccel LoadAccelerators hInstance lpszMenuName while GetMessage 22 LRESULTCALLBACKWndProc 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 统计计算 23 caseIDM 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 24 本例程的头文件如下 defineIDM ADDMENU15 defineIDM DELMENU16 defineIDM EXIT17 defineIDM HELP22 defineIDM qiuhe23 defineIDM fangcha24 defineIDM pinjunzhi25 defineIDM junfanggen26 25 本例程用到的资源文件源代码如下 include c prog book 7 1 7 1 h include windows h MENUMENUDISCARDABLEBEGINPOPUP 文件 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 ASCIIEND 26 7 2位图资源及其应用 27 7 2 1位图概念 位图是一种数字化的图形表示形式 位图中的每个像素点由位图文件中的一位或多位数据表示 整个位图的信息被细化为每个像素点的属性值 位图数据量一般较大 为了提高显示刷新速度 位图操作须在内存中进行 28 7 2 2位图的操作过程 位图操作过程 定义位图句柄 HBITMAPhBm 加载或创建hBm LoadBitmap hInstance lpszName hBm CreateCompatibleBitmap hdc nWidth nHeight 选入内存设备环境SelectObject hdcmem hBm 输出BOOLBitBlt HDChdcDest 目的设备环境句柄intXDest intYDest intnWidth intnHeitght 位图基点及高宽HDChdcSrc intnXSrc intnYsrc 源设备环境句柄及位图基点DWORDdwRop 标识位图显示方式 29 在输出位图之前 经常需调用函数GetObject获取位图的尺寸 GetObject hBitmap 为位图句柄sizeof BITMAP BITMAP结构的大小 LPVOID bm BITMAP结构的地址 应用程序调用函数GetObject后 将指定位图的信息写入BITMAP结构中 结构见教材 30 7 2 3位图操作实例 例7 2 本例调用一幅坦克的图片 并在用户窗口区上显示LRESULTCALLBACKWndProc PAINTSTRUCTps switch message caseWM CREATE hdc GetDC hwnd 获取设备环境句柄hdcmem CreateCompatibleDC hdc 内存设备环境句柄ReleaseDC hwnd hdc 释放设备环境句柄caseWM PAINT hdc BeginPaint hwnd 将位图选入内存设备环境 31 将内存设备环境中的位图拷贝到设备环境中BitBlt hdc 180 80 bm bmWidth bm bmHeight hdcmem 0 0 SRCCOPY EndPaint hwnd 本例的资源文件如下 pic7BITMAPpic7 2 bmp 定义位图资源 32 7 3对话框资源及其应用 对话框是一个弹出式窗口 它一般用于用户输入或与用户进行交互活动的场合 对话框 模式 非模式 允许用户在该对话框与应用程序其他窗口之间的切换 非模式对话框从WinMain函数的消息循环中接收输入 不允许用户在关闭对话框之前切换到应用程序的其他窗口 33 7 3 1模式对话框的编程方法 1 定义对话框资源一般的形式为 对话框名DIALOG 载入特性选项 X Y Width Height 设置选项 对话框的控件定义 样式选项决定了对话框的外型特点 样式见表7 6 CHECKBOX ICON COMBOBOXLISTBOX DEFPUSHBUTTON PUSHBUTTON RADIOBUTTON GROUPBOX EDIT SCROLLBAR静态文本控件 34 2 调用函数DialogBox显示对话框调用DialogBox函数在窗口中显示对话框 intDialogBox HINSTANCEhInstance LPCTSTRlpszDialogName 对话框资源的名称HWNDhwndParent 拥有该对话框的窗口句柄DLGPROClpDialogFunc 对话框处理函数的地址 35 3 构造对话框消息处理函数对话框消息处理函数的一般形式为 BOOLCALLBACKDlgProc HWNDhDlg switch message caseWM INITDIALOG return1 caseWM COMMANDswitch LOWORD wParam case break break return0 36 在对话框消息处理函数中主要常处理以下两类消息 a WM INITDIALOG消息对话框在响应消息WM INITDIALOG消息时完成其初始化操作 在功能上与主窗口函数的WM COMMAND消息相似 b WM COMMAND消息对话框在响应消息WM COMMAND时 通过查看消息字参数 wParam 中的低位字节 与控件标识 ID 相比较 以确定产生交互请求的控件并据此转入相应的处理过程进行处理 37 4 关闭对话框调用函数EndDialog可以关闭对话框 BOOLEndDialog HWNDhdlg INT PTRnResult Windows消息框是模态对话框的一种特殊形式 应用程序可通过调用函数MessageBox生成一些简单但又常用的消息框 intMessageBox HWNDhwnd 拥有消息框的窗口LPCTSTRlpszText 消息框中显示的字符串LPCTSTRlpszCaption 作为标题的字符串DWORDdwType 指定消息框的内容 38 dwType常用标识及其说明MB CANCELTRYCONTINUE含有Cancel TryAgain和Continue按钮的消息框MB ICONEXCLAMATION MB ICONWARNING含有惊叹号图标的消息框MB ICONQUESTION含有问号图标的消息框MB ICONSTOP MB ICONERROR MB ICONHAND含有停止图标的消息框MB OK含有一个OK按钮的消息框MB OKCANCEL含有OK和CANCEL按钮的消息框MB RETRYCANCEL含有RETRY和CANCEL按钮的消息框MB YESNO含有YES和NO按钮的消息框MB YESNOCANCEL含YES NO和CANCEL按钮的消息框 39 7 3 2模态对话框应用实例 40 LRESULTCALLBACKWndProc switch message caseWM COMMAND switch LOWORD wParam caseIDM OPEN MessageBox hwnd 文件已经打开 文件打开 MB OK break caseIDM SAVE MessageBox hwnd 文件保存成功 文件保存 MB OK break caseIDM EXIT SendMessage hwnd WM DESTROY 0 0 break caseIDM ABOUT 创建对话框DialogBox hInst About hwnd DLGPROC DlgProc break break caseWM DESTROY PostQuitMessage 0 break default returnDefWindowProc hwnd message wParam lParam return0 41 BOOLCALLBACKDlgProc HWNDhdlg switch message caseWM INITDIALOG 初始化对话框return1 caseWM COMMAND 处理对话框消息switch LOWORD wParam caseIDOK 关闭对话框EndDialog hdlg 0 return1 break caseWM CLOSE EndDialog hdlg 0 return1 return0 42 本例的资源程序代码如下 include include 7 3 h MenuMENUDISCARDABLE POPUP 文件 F MENUITEM 打开 O tCtrl O IDM OPENMENUITEMSEPARATORMENUITEM 保存 S tCtrl S IDM SAVEMENUITEMSEPARATORMENUITEM 退出 X IDM EXIT POPUP 帮助 H MENUITEM 关于 A IDM ABOUT 43 MenuACCELERATORS O IDM OPEN S IDM SAVE AboutDIALOG10 10 100 50STYLEWS POPUP WS CAPTION WS SYSMENUCAPTION 关于 FONT18 楷体 对话框中的文本字体类型及大小 CTEXT Windows模态对话框 1 13 10 80 10DEFPUSHBUTTON 确定 IDOK 35 30 30 12 44 7 3 3非模态对话框的编程方法 非模态对话框在对话框的定义 对话框的创建及消息处理上与模态对话框略有差别 方法如下 1 定义对话框样式非模态对话框的定义一般形式如下 STYLEWS POPUP WS CAPTION WS VISIBLE样式中应包含WS VISIBLE 否则无法在屏幕上显示2 创建对话框函数非模态对话框的创建由函数CreateDialog完成 HWNDCreateDialog HINSTANCEhInstance 当前应用程序实例句柄LPCTSTRlpszDialogName 对话框名HWNDhwndParent 拥有该对话框的窗口句柄DLGPROClpDialogFunc 对话框处理函数地址 45 3 消息循环部分的处理由于非模态对话框并不禁止应用程序向其他窗口发送消息 因此 在WinMain函数的消息循环中必须包含截获发往非模态对话框的消息 并将其发往相应的对话框处理函数进行处理 其消息循环过程的一般形式为 while GetMessage 46 7 3 4非模态对话框应用实例 例7 4 在 关于 窗口不关闭的前提下 仍可以对 文件 下拉菜单进行操作 如选 文件 菜单中的 创建 选项 即可弹出 创建 窗口 47 LRESULTCALLBACKWndProc switch message caseWM COMMAND switch LOWORD wParam caseIDM NEW MessageBox hwnd 文件创建成功 文件创建 MB OK break caseIDM OPEN MessageBox hwnd 文件打开成功 文件打开 MB OK break caseIDM SAVE MessageBox hwnd 文件保存成功 文件保存 MB OK break caseIDM EXIT SendMessage hwnd WM DESTROY 0 0 brea

温馨提示

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

评论

0/150

提交评论