德州学院计算机系1VisualC++与面向对象程序设计•第5章资源的应用德州学院计算机系主讲教师韩金姝德州学院计算机系2本章主要内容菜单与加速键资源位图资源及其应用对话框资源及其应用德州学院计算机系3菜单与加速键资源资源是Windows应用程序用户界面的重要组成部分,极大的方便了应用程序与用户之间的交互。常用资源如:加速键、位图、对话框、菜单。资源的两种编辑方法1.资源可使用资源编辑器来创建和编辑2.资源也可使用文本编辑器(如记事本)编辑德州学院计算机系4菜单与加速键资源菜单与加速键部分的主要内容菜单的创建过程操作菜单项菜单资源应用实例加速键资源(自学)讲授方法资源的两种编辑方法对比讲授;API和MFC对比讲授德州学院计算机系5菜单的创建过程菜单的组成窗口主菜单条、下拉式菜单框、菜单项热键标识、菜单项加速键标识和菜单分割线、选中标识等菜单的创建:分为定义和加载两个步骤定义菜单:在.rc文件中定义New/File/textfile写入定义内容另存为.rc德州学院计算机系6菜单的创建过程定义内容包括:1.#includewindows.h2.#include“Menu.h”Menu.h文件中定义了菜单项标识对应的数值,如:#defineIDM_CUT20取值范围:0-65535,是用户自定义的,可选用。德州学院计算机系7菜单的创建过程3.定义格式:菜单名.MENU关键字.载入特性选项表(参见表5-1).菜单项列表例:MyMenuMENUMOVEABLE{POPUP“编辑”{MENUITEM“剪切”,IDM_CUTMENUITEM“复制”,IDM_COPY…….MENUITEMSEPARATOR}}德州学院计算机系8菜单的创建过程菜单的加载方法2:在创建窗口时加载。实现语句为:HMENUhmenu…hmenu=LoadMenu(hInstance,”MyMenu”)Hwnd=CreateWindow(…,….,hmenu,….)德州学院计算机系9菜单的创建过程菜单的加载方法3:动态加载菜单(前提是在方法2的基础上)。可在同一程序中实现多种不同的菜单操作界面。实现过程如下:定义菜单句柄第一次采用LoadMenu+CreateWindow之后是LoadMenu+SetMenu德州学院计算机系10菜单的创建过程API创建菜单小结:Step1:.rc文件。菜单名、菜单特性、菜单项和ID标识。Step2:.h文件。菜单项ID所对应的数值。Step3:.cpp文件。加载菜单的三种方式。注意:加载时使用的是菜单名,而不是.rc文件名。.rc和.cpp都要包含.h文件德州学院计算机系11菜单的创建过程例5-1(P78):创建一个菜单。其中有三个菜单项,分别为“文件”、“计算”和“帮助”,各菜单项又有子菜单选项。程序演示1德州学院计算机系12菜单的创建过程应用资源编辑器创建菜单headerfiles右键添加已存在的resource.h并可自定义菜单项ID对应数值,注意菜单名。得到.h文件在.cpp中加载,MAKEINTRESOURCE(IDR_MENU1)新建工程File/new/files/ResourceScript,得.rc文件右键/Insert/Menu/new右键properties,所见即所得安排菜单项及ID值德州学院计算机系13操作菜单项1.API创建菜单,应用程序可调用相关函数访问菜单项的属性或编辑菜单项,也可实现对菜单项的动态控制.参加教材P73-76.2.资源编辑器创建菜单,可以直接采用所见即所得方式,进行修改菜单名称及ID值、变换菜单项位置、添加/删除菜单等操作3.练习:应用方法2创建并操作菜单德州学院计算机系14位图资源及其应用位图是一种数字化的图形表示形式与设备相关的位图DDB或GDI位图DDB位图对象有一个与之关联的WINDOWS数据结构,它在WINDOWSGDI模块内进行维护。程序可以获得位图数据的副本,但是其中位的排列取决于显示硬件。与设备无关的位图DIB可在不同机器或系统中显示位图所固有的图像。是一种外部的位图格式,经常存储在以BMP为后缀的位图文件中,还支持图像数据的压缩。德州学院计算机系15位图资源及其应用操作位图必须要有:位图、内存设备描述表、设备描述表内存设备描述表位设置的目的因为位图数据量大,为了提高显示速度,位图操作在内存中进行。内存设备描述表的相关操作为:HDChdcmenhdcmen=CreateCompatibleDC(hDC)SelectObject(hdcmen,hBm)(将位图选入内存设备境)操作位图DeleteDC(hdcmen)德州学院计算机系16位图资源及其应用位图的操作过程定义:HBITMAPhBm加载或创建:hBm=LoadBitmap(hInstance,位图名)选入内存设备环境:SelectObject(hdcmen,hBm)输出:BitBlt(),将位图从内存设备环境复制到设备环境德州学院计算机系17位图资源及其应用说明:应用程序通过响应消息WM_CREATE完成加载或创建位图操作。位图的有关信息可通过调用GetObject()获取。该函数将位图的信息写入BITMAP结构。德州学院计算机系18位图资源及其应用例5-2(P84):位图操作在一个窗口中央加载一个任意位图,位图尺寸为窗口面积的1/4,当单击鼠标左键或键盘上的向上箭头时,位图向上移动,当移动到窗口的上边界时,窗口显示“已经达到顶部,不能再向上移动了”字样。当单击鼠标右键或键盘向下箭头时,位图下移,当到达窗口下边界时,屏幕显示提示文字。程序演示2德州学院计算机系19位图资源及其应用基于MFC的DDB位图操作新建基于对话框的工程位图资源.rc,Insert/bitmap/import显示位图:在OnPaint()中设备描述表、位图句柄、内存设备描述表、位图选如内存设备描述表、由内存DC到屏幕DC修改StretchBlt()的尺寸参数,可实现位图显示尺寸的缩放。程序演示3德州学院计算机系20对话框资源及其应用对话框是一个弹出式窗口。包含了控件:按钮、滚动条、编辑框、列表框。功能:发送消息如警告、提示框消息;接收消息如用户输入的消息和提供消息。对话框消息的处理在独立的对话框函数内进行。德州学院计算机系21对话框资源及其应用对话框的形式模式对话框:不允许用户在关闭对话框之前切换到应用程序的其他窗口。非模式对话框:允许用户在该对话框与应用程序其他窗口之间的切换。非模式对话框从WinMain函数的消息循环中接收输入。德州学院计算机系22对话框资源及其应用模式对话框的编程方法Step1:定义对话框资源.rcStep2:显示对话框DialogBox()Step3:构造对话框处理函数。具有与主窗口相似的参数。主要处理WM_INITDIALOG/WM_COMMAND,通过LOWORD(wParam)确定产生交互请求的控件并转入相应处理过程Step4:关闭对话框。EndDialog()德州学院计算机系23对话框资源及其应用例5-3(P92):模式对话框应用实例程序含有标题栏、两个下拉菜单。单击菜单,弹出对话框,此时其他操作都是无效的。演示程序程序4是基于API编写的,演示程序5是基于MFC编写的,两者功能相似。程序中同时还涉及了菜单的创建和响应程序演示4程序演示5德州学院计算机系24对话框资源及其应用基于API的非模式对话框编程与模式对话框编程类似Step1:对话框定义(.rc):STYLEWS_POPUP|WS_CAPTION|WS_VISIBLEStep2:对话框创建(.cpp)hdlg=CreateDialog(hInstance,About,hWnd,(DLGPROC)DlgProc);Step3:消息处理:非模式对话框允许应用程序向其他窗口发送信息,因此在WinMain函数消息循环中调用IsDialogMessage判断消息是否发往非模式对话框Step4:关闭对话框:DestroyWindow()DialogBox()EndDialog()德州学院计算机系25对话框资源及其应用含有非模式对话框程序的消息循环while(GetMessage(&Msg,NULL,0,0)){if(!IsDialogMessage(hdlg,&Msg)){TranslateMessage(&Msg);DispatchMessage(&Msg);}}德州学院计算机系26对话框资源及其应用例5-4(P97):非模式对话框应用程序含有标题栏、两个下拉菜单。单击菜单,弹出保存对话框,此时其他操作都是无效的。但当弹出关于对话框(属于非模式对话框)时,其他窗口仍能进行操作。程序演示6德州学院计算机系27对话框资源及其应用基于MFC的非模式对话框编程Step1:新建工程,添加对话框资源,并创建类Step2:添加菜单,建立消息映射Step3:添加代码,包含头文件。(例:欢迎)程序演示7德州学院计算机系28对话框资源及其应用通用对话框资源程序员除使用自定义的对话框外,还可以直接调用Windows系统提供的通用对话框模板生成对话框资源。如:OPEN,SAVE,SAVEAS,PRINT.这些对话框模板在系统提供的COMMDLG.h文件中德州学院计算机系29对话框资源及其应用通用对话框模板的创建Step1:填充对话框模板结构1.OPENFILENAME,CHOOSECOLOR,CHOOSEFONT,PRINTDLG,PAGESETUPDLG,FINDREPLACE,具体参见MSDN2.钩子函数:该函数的功能与对话框窗口处理函数相同。Step2:调用函数显示对话框。不同功能对话框,对应的显示函数也不同。表5-11程序演示8德州学院计算机系30本章小结习题五:5.2是综合运用前5章编程技巧的程序,主讲教师给出了程序设计思想,重点讲授动态加载菜单和图形绘制,并给出了程序实现框架,绘制矩形后可以通过键盘左右方向键,使得所绘制的矩形缩放。请同学们进一步填充完善该程序。程序演示9