MFC-Windows应用程序设计-第8章-资源.ppt_第1页
MFC-Windows应用程序设计-第8章-资源.ppt_第2页
MFC-Windows应用程序设计-第8章-资源.ppt_第3页
MFC-Windows应用程序设计-第8章-资源.ppt_第4页
MFC-Windows应用程序设计-第8章-资源.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

MFCWindows应用程序设计,第八章资源,第8章资源,8.1资源和资源文件,8.1资源和资源文件资源:就是一种可供Windows应用程序利用,可单独编辑,并可动态加载的数据。资源头文件:Resource.h资源描述文件:.rc,8.1资源和资源文件,8.1资源和资源文件资源标识:为了对不同的资源加以区别,所有的资源必须得有一个标识,这些标识其实就是用一些符号来表示的编码,它们定义在Resource.h。,在常见的菜单系统中,最上面的一层水平排列的菜单称为顶层菜单,每一个顶层菜单项可以是一个简单的菜单命令,也可以是下拉(Popup)菜单,在下拉菜单中的每一个菜单项也可是菜单命令或下拉菜单,这样一级一级下去可以构造出复杂的菜单系统。,8.2菜单,为了使应用程序更容易操作,对于菜单系统的设计还遵循下列一些规则:若单击某菜单项后,将弹出一个对话框,那么在该菜单项文本后有“”。若某项菜单有子菜单,那么在该菜单项文本后有“”。若菜单项需要助记符,则用括号将带下划线的字母括起来。助记符与Alt构成一个组合键,当按住“Alt”键不放,再敲击该字母时,对应的菜单项就会被选中。若某项菜单需要快捷键的支持,则一般将其列在相应菜单项文本之后。所谓“快捷键”是一个组合键,如Ctrl+C,使用时是先按下“Ctrl”健不放,然后再按“C”键。任何时候按下快捷键,相应的菜单命令都会被执行。,8.2菜单,8.2菜单,8.1.1用编辑器设计菜单1、编辑菜单2、菜单命令的消息映射,8.2菜单,8.2.1用编辑器设计菜单在项目工作区窗口中选择“ResourceView”页面,展开节点,双击资源“Menu”项中的IDR_MAINFRAME,则出现菜单编辑器窗口。1、编辑菜单在菜单空位上双击鼠标左键,出现菜单项的属性对话框。,8.2菜单,菜单项属性对话框的参数说明:ID:菜单的资源ID标识符。标题:用来标识菜单项显示文本。助记符字母前面须有一个CMenu*CWnd:GetMenu()const;2、装入和分离菜单CMenuBOOLCMenu:LoadMenu(UINTnIDResource);HMENUCMenu:Detach();nIDResource为菜单资源ID标识符。,8.2菜单,练习:更改应用程序菜单,8.2菜单,8.2.3菜单的编程控制CMenu1.装入和分离菜单将菜单从资源装入应用程序中,需调用CMenu成员函数LoadMenu,使菜单对象和菜单句柄分离需调用CMenu成员函数Detach。BOOLLoadMenu(UINTnIDResource);HMENUDetach();nIDResource为菜单资源ID标识符。,8.2菜单,8.2.3菜单的编程控制创建菜单CMenu类的CreateMenu和CreatePopupMenu分别用来创建一个菜单或子菜单框架,它们的原型如下:BOOLCreateMenu();/产生一个空菜单BOOLCreatePopupMenu();/产生一个空的弹出式子菜单,8.2菜单,8.2菜单,8.2.3菜单的编程控制,3、添加菜单项BOOLAppendMenu(UINTnFlags,UINTnIDNewItem=0,LPCTSTRlpszNewItem=NULL);BOOLInsertMenu(UINTnPosition,UINTnFlags,UINTnIDNewItem=0,LPCTSTRlpszNewItem=NULL);nIdNewItem:表示新菜单项的资源ID标识符。lpszNewItem:表示新菜单项的内容。nPosition:表示新菜单项要出入的菜单位置,从序号0开始。,nFlags的值MF_BYCOMMAND菜单项以ID标识符来标识MF_BYPOSITION菜单项以位置来标识MF_POPUP菜单项有弹出式子菜单MF_SEPARATOR分隔线MF_OWNERDRAW自画菜单项MF_STRING字符串标志MF_CHECKED设置菜单项的选中标记MF_UNCHECKED取消菜单项的选中标记MF_DISABLED禁用菜单项MF_ENABLED允许使用菜单项MF_GRAYED菜单项灰显,8.2菜单,8.2.3菜单的编程控制,需要注意的是:当nFlags为MF_BYPOSITION时,nPosition表示新菜单项要插入的具体位置,为0时表示第一个菜单项,为-1时,将菜单项添加菜单的末尾处。nFlags的标志中,可以用“|”(按位或)来组合,例如MF_CHECKED|MF_STRING等。但有些组合是不允许的,例如MF_DISABLED、MF_ENABLED和MF_GRAYED,MF_STRING、MF_OWNERDRAW、MF_SEPARATOR和位图,MF_CHECKED和MF_UNCHECKED都不能组合在一起。,8.2菜单,8.2.3菜单的编程控制,删除菜单项BOOLDeleteMenu(UINTnPosition,UINTnFlags);nPosition表示要删除的菜单项位置,它由nFlags进行说明。若当nFlags为MF_BYCOMMAND时,nPosition表示菜单项的ID标识符,而当nFlags为MF_BYPOSITION时,nPosition表示菜单项的位置(第一个菜单项位置为0)。,8.2菜单,8.2.2菜单的编程控制,8.2菜单,8.2.2菜单的编程控制,5、获取菜单项UINTGetMenuItemCount()const;该函数用来获得菜单的菜单项数,调用失败后返回-1。UINTGetMenuItemID(intnPos)const;该函数用来获得由nPos指定菜单项位置(以0为基数)的菜单项的标识号,若nPos是SEPARATOR(分隔符),则返回-1。CMenu*GetSubMenu(intnPos)const;该函数用来获得指定菜单的弹出式菜单的菜单句柄。该弹出式菜单位置由参数nPos指定,开始的位置为0。若菜单不存在,则创建一个临时的菜单指针。,8.2.4使用快捷菜单快捷菜单是一种浮动的弹出式菜单。当用户按下鼠标右键时,就会相应地弹出一个浮动菜单,提供了几个与当前选择内容相关的菜单选项。WM_RBUTTONDOWNBOOLCMenu:TrackPopupMenu(UINTnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=NULL);,8.2菜单,8.2.4使用快捷菜单BOOLCMenu:TrackPopupMenu(UINTnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=NULL);nFlags:表示菜单在屏幕显示的位置以及鼠标按钮标志,x和y:表示菜单的水平坐标和菜单的顶端的垂直坐标。pWnd:表示弹出菜单的窗口,此窗口将收到菜单全部的WM_COMMAND消息。lpRect:是一个RECT结构或CRect类指针,它表示一个矩形区域,用户单击这个区域时,弹出菜单不消失。而当lpRect为NULL时,若用户击在菜单外面,菜单立刻消失。,8.2菜单,表nFlags的值及其对其他参数的影响,8.2菜单,例使用快捷菜单,8.2菜单,8.3快捷键表,加速键也往往被称为键盘快捷键,一个加速键就是一个按键或几个按键的组合,它用于激活特定的命令。加速键也是一种资源,它的显示、编辑过程和菜单相似。在项目工作区窗口的ResourceView(资源视图)页面中,展开中Accelerator(加速键)的资源项,双击IDR_MAINFRAME,在右侧窗口中出现的加速键资源列表。建立一个新的加速键时,只要双击加速键列表的最下端的空行,弹出“Accel属性”(AccelProperties)对话框,其中可设置的属性如表所示。,表加速键常规(General)属性的各项含义,8.3快捷键,8.3快捷键,练习:为菜单矩形和铅笔线添加快捷键。矩形菜单的快捷键为Ctrl+Shift+R,铅笔线的快捷键为Ctrl+Shift+I。,8.4.1制作图标1.创建一个新的图标或光标在VisualC+6.0中,创建一个应用程序后,当按快捷键Ctrl+R就可打开“插入资源”对话框,从中选择Cursor(光标)或Icon(图标)资源类型,单击新建按钮后,系统为程序添加一个新的图标或光标资源,同时在开发环境右侧出现图像编辑器2.选用和定制显示设备在图像编辑器工作窗口的控制条上,有一个“新设备图像”(NewDeviceImage)按钮,单击此按钮后,系统弹出相应的新设备列表,可以从中选取需要的显示设备。,8.4图标,8.4.2图标的调入、清除1.图标的调入在MFC中,当在应用程序中添加一个图标资源后,就可以使用CWinApp:LoadIcon函数可将其调入并返回一个图标句柄。函数原型如下:HICONLoadIcon(UINTnIDResource)const;nIDResource:表示图标资源的字符串名和标识。函数返回的是一个图标句柄。AfxGetApp(),8.4图标,8.4.2图标的调入、清除1.图标的调入如果不想使用新的图标资源,也可使用系统中预定义好的标准图标,这时需调用CWinApp:LoadStandardIcon函数。HICONLoadStandardIcon(LPCTSTRlpszIconName)const;lpszIconName预存图标可取如下值:IDI_APPLICATION默认的应用程序图标IDI_HAND手形图标(用于严重警告)IDI_QUESTION问号图标(用于提示消息)IDI_EXCLAMATION警告消息图标(惊叹号)IDI_ASTERISK消息图标,8.4图标,8.4.2图标的调入、清除2.图标的消除图标装载后,可使用全局函数DestroyIcon来删除图标,并释放为图标分配的内存,其原型如下:BOOLDestroyIcon(HICONhIcon);hIcon:用来指定要删除的图标句柄。,8.4图标,8.4.3应用程序图标的改变1、HICONSetIcon(HICONhIcon,BOOLbBigIcon);HICONGetIcon(BOOLbBigIcon)const;hIcon:图标的句柄。bBigIcon:如果为TRUE,则指定了3232像素的图标;如果为FALSE,则指定了1616像素的图标。,8.4图标,8.4.3应用程序图标的改变2、DWORDSetClassLong(HWNDhWnd,intnIndex,LONGdwNewLong);DWORDGetClassLong(HWNDhWnd,intnIndex);hWnd:指定窗口类句柄。dwNewLong:用来指定新的32位值。nIndex用来指定与WNDCLASSEX结构相关的索引,它可以是下列值之一:GCL_HBRBACKGROUND窗口类的背景画刷句柄GCL_HCURSOR窗口类的的光标句柄GCL_HICON窗口类的的图标句柄GCL_MENUNAME窗口类的的菜单资源名称,8.4图标,练习:应用程序图标的改变AfxGetApp():获取当前应用程序对象指针。,8.4图标,Windows的位图常用的是GDI位图,GDI位图是由MFC中的CBitmap类来表示的。,8.5位图,8.5.1CBitmap类1、把位图资源载入位图对象BOOLLoadBitmap(LPCTSTRlpszResourceName);BOOLLoadBitmap(UINTnIDResource);lpszResourceName:资源名字nIDResource:资源的标识,8.5位图,8.5.1CBitmap类2、创建CBitmap类对象BOOLCreateBitmap(intnWidth,intnHeight,UINTnPlanes,UINTnBitcount,constvoid*lpBits);nWidth:指定位图的宽度(以像素数为单位)。nHeight:指定位图的高度(以像素数为单位)。nPlanes:指定位图中的彩色位面数。nBitCount指定位图中每个像素颜色的位数。lpBits:指向一个短整型数组,数组中记录了位图的初始位值。如果为NULL,则新的位图没有被初始化。,8.5位图,8.5.1CBitmap类2、创建CBitmap类对象HBITMAPCreateCompatibleBitmap(HDChdc,intnWidth,intnHeight);hdc:设备环境句柄。nWidth:指定位图的宽度,单位为像素。nHeight:指定位图的高度,单位为像素。返回值:如果函数执行成功,那么返回值是位图的句柄;如果函数执行失败,那么返回值为NULL。若想获取更多错误信息,请调用GetLastError。,8.5位图,3.获取位图信息intCBitMap:GetBitmap(BITMAP*pBitMap);typedefstructtagBITMAPLONGbmType;/位图类型,必须为0LONGbmWidth;/位图宽度LONGbmHeight;/位图高度LONGbmWidthBytes;/每一行像素所在的byte数WORDbmPlanes;/颜色平面数WORDbmBitsPixel;/像素的位数LPVOIDbmBits;/位图内存指针BITMAP;,8.5位图,8.5.2显示位图CDCBOOLBitBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,DWORDdwRop);BOOLStretchBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,intnSrcWidth,intnSrcHeight,DWORDdwRop);,8.5位图,8.5.3把位图选入内存设备环境CDCMemDC;MemDC.CreateCompatibleDC(NULL);MemDC.SelectObject(,8.5位图,由于位图不能直接显示在实际设备中,因此对于GDI位图的显示则必须遵循下列步骤:(1)调用CBitmap类的CreateBitmap、CreateCompatibleBitmap以及CreateBitmapIndirect或LoadBitmap函数创建一个适当的位图对象。(2)调用CDC:CreateCompatibleDC函数创建一个内存设备环境,以便位图在内存中保存下来,并与指定设备(窗口设备)环境相兼容;(3)调用CDC:SelectObject函数将位图对象选入内存设备环境中;(4)调用CDC:BitBlt或CDC:StretchBlt函数将位图复制到实际设备环境中。,8.5位图,练习:位图的显示。程序运行时窗口显示图1。当鼠标左键按下时显示图2,左键松开恢复成图1。,8.5位图,图1,图2,补充:光标,1.使用库存光标HCURSORCWinApp:Loa

温馨提示

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

评论

0/150

提交评论