第7章_资源在Windows编程中的应用.ppt_第1页
第7章_资源在Windows编程中的应用.ppt_第2页
第7章_资源在Windows编程中的应用.ppt_第3页
第7章_资源在Windows编程中的应用.ppt_第4页
第7章_资源在Windows编程中的应用.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

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

文档简介

1、1,第7章 资源在Windows编程中的应用,加速键,对话框,位图,资源,光标,菜单,工具条,字符串,2,7.1菜单和加速键资源及其应用,菜单由以下组成部分: (1) 窗口主菜单条 (2) 下拉式菜单框 (3) 菜单项热键标识 (4) 菜单项加速键标识 (5) 菜单项分隔线,3,7.1.1菜单的创建过程,(1)定义菜单 菜单在资源描述文件中的定义形式为: menuID MENU ,载入特性选项菜单项列表,字符串,或165535之间的整数,选 项说 明 DISCARDABLE 当不再需要菜单时可丢弃 FIXED将菜单保存在内存中的固定位置 LOADONCALL需要时加载菜单 MOVEABLE菜单

2、在内存中可移动 PRELOAD立即加载菜单,POPUP语句 MENUITEM语句,4,POPUP语句定义弹出式菜单,其形式为: POPUP 菜单项名 ,选项; 在菜单项名中加入符号“ wndclass.lpszMenuName=lpszMenuName;,HWND hwnd;HMENU hmenu; hmenu=LoadMenu(hlnstance, My_menu); hwnd=CreateWindow( ,hmenu, );,hmenu2=LoadMenu(hlnstance, Menu2); SetMenu(hwnd,hmenu2); ,9,7.1.2操作菜单项,1禁止或激活菜单项 BO

3、OL EnableMenuItem (HMENU hmenu, UlNT wIDEnableItem,/被禁止或激活的菜单项标识 UINT dwEnable ),据dwEnable的取值,可为菜单项的ID值,也为该菜单项在菜单中位置,标 识说 明 MF_BYCOMMAND以ID值标识菜单项 MF_ENABLED激活菜单项 MF_BYPOSITION表明以位置标识菜单项 MF_GRAYED禁止菜单项并使其变灰显示 MF_DISABLED禁止菜单项,10,2.设置或取消选中标志,DWORD CheckMenuItem ( HMENU hmenu, UINT wIDCheckItem,/菜单项标识

4、UINT dwCheck/操作标识 ),标 识说 明 MF_CHECKED添加选中标志 MF_UNCHECKED删除选中标志,11,3.增加菜单项 在菜单的尾部增加菜单项 BOOL AppendMenu ( HMENU hmenu, UINT dwFlags,/ 新加入的菜单项类型标识 UINT dwIDNewItem,/ 新加入菜单项的ID LPCTSTR lpNewItem/ 新加入的菜单项内容 ) 例如在 “文件”菜单的末尾增加一项“关于”: AppendMenu (hmenu, MF_ENABLED,IDM_ABOUT, “关于( /定义菜单句柄 LRESULT CALLBACK Wn

5、dProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain() ShowWindow( hwnd, nCmdShow) ; UpdateWindow(hwnd); hAccel=LoadAccelerators(hInstance,lpszMenuName); while( GetMessage(,22,LRESULT CALLBACK WndProc() switch(message) case WM_COMMAND: switch(LOWORD(wParam) case IDM_ADDMENU:/在主菜单中添加弹出式菜单 hmenu=GetMenu

6、(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_P

7、OPUP|MF_BYPOSITION, (UINT)haddmenu,统计计算(,23,case IDM_DELMENU: DeleteMenu(hmenu,2,MF_BYPOSITION); /删除统计计算菜单项 /相应改变“文件”菜单中有关统计计算菜单项的属性 EnableMenuItem(hmenu,IDM_ADDMENU,MF_ENABLED); EnableMenuItem(hmenu,IDM_DELMENU,MF_GRAYED); DrawMenuBar(hwnd);/重新显示窗口菜单 break; case IDM_EXIT: SendMessage(hwnd,WM_DESTRO

8、Y,0,0); break; break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); return 0; ,24,本例程的头文件如下: #define IDM_ADDMENU 15 #define IDM_DELMENU 16 #define IDM_EXIT 17 #define IDM_HELP 22 #define IDM_qiuhe 23 #define IDM_fangcha 24 #define IDM_pinjunzh

9、i 25 #define IDM_junfanggen 26,25,本例程用到的资源文件源代码如下: #include c:prog_book7_17_1.h #include windows.h MENU MENU DISCARDABLE BEGIN POPUP 文件( 加载或创建 hBm=LoadBitmap(hInstance, lpszName) hBm=CreateCompatibleBitmap(hdc,nWidth,nHeight) 选入内存设备环境 SelectObject(hdcmem,hBm); 输出 BOOL BitBlt ( HDC hdcDest,/目的设备环境句柄

10、int XDest,int YDest, int nWidth, int nHeitght, /位图基点及高宽 HDC hdcSrc, int nXSrc,int nYsrc, /源设备环境句柄及位图基点 DWORD dwRop /标识位图显示方式 ),29,在输出位图之前,经常需调用函数GetObject获取位图的尺寸: GetObject (hBitmap,/为位图句柄 sizeof(BITMAP),/BITMAP结构的大小 (LPVOID) switch(message) case WM_CREATE: hdc=GetDC(hwnd);/获取设备环境句柄 hdcmem=CreateCom

11、patibleDC(hdc);/内存设备环境句柄 ReleaseDC(hwnd,hdc); /释放设备环境句柄 case WM_PAINT: hdc=BeginPaint(hwnd, /将位图选入内存设备环境,31,/将内存设备环境中的位图拷贝到设备环境中 BitBlt(hdc,180,80,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY); EndPaint(hwnd, 本例的资源文件如下: pic7 BITMAP pic7_2.bmp/定义位图资源,32,7.3 对话框资源及其应用,对话框是一个弹出式窗口,它一般用于用户输入或与用户进行交互活动的场合,对

12、 话 框,模式,非模式,允许用户在该对话框与应用程序其他窗口之间的切换,非模式对话框从WinMain函数的消息循环中接收输入,不允许用户在关闭对话框之前切换到应用程序的其他窗口,33,7.3.1 模式对话框的编程方法,1定义对话框资源 一般的形式为: 对话框名 DIALOG 载入特性选项 X,Y, Width,Height 设置选项 对话框的控件定义 ,样式选项决定了对话框的外型特点,样式见表7-6,CHECKBOX、ICON、COMBOBOX LISTBOX、 DEFPUSHBUTTON、 PUSHBUTTON、RADIOBUTTON、 GROUPBOX、EDIT、 SCROLLBAR 静态

13、文本控件,34,2调用函数DialogBox显示对话框 调用DialogBox函数在窗口中显示对话框: int DialogBox ( HINSTANCE hInstance, LPCTSTR lpszDialogName, /对话框资源的名称 HWND hwndParent,/拥有该对话框的窗口句柄 DLGPROC lpDialogFunc /对话框处理函数的地址 ),35,3构造对话框消息处理函数 对话框消息处理函数的一般形式为: BOOL CALLBACK DlgProc(HWND hDlg,) switch(message) case WM_INITDIALOG: return 1;

14、case WM_COMMAND switch (LOWORD (wParam ) case break; break; return 0; ,36,在对话框消息处理函数中主要常处理以下两类消息: (a)WM_ INITDIALOG 消息 对话框在响应消息WM_ INITDIALOG 消息时完成其初始化操作,在功能上与主窗口函数的WM_COMMAND消息相似。 (b)WM_COMMAND消息 对话框在响应消息WM_COMMAND时,通过查看消息字参数(wParam)中的低位字节,与控件标识(ID)相比较,以确定产生交互请求的控件并据此转入相应的处理过程进行处理。,37,4关闭对话框 调用函数En

15、dDialog可以关闭对话框: BOOL EndDialog(HWND hdlg,INT_PTR nResult),Windows消息框是模态对话框的一种特殊形式,应用程序可通过调用函数MessageBox生成一些简单但又常用的消息框: int MessageBox ( HWND hwnd,/拥有消息框的窗口 LPCTSTR lpszText,/消息框中显示的字符串 LPCTSTR lpszCaption,/作为标题的字符串 DWORD dwType/指定消息框的内容 ),38,dwType常用标识及其说明 MB_CANCELTRYCONTINUE 含有Cancel、Try Again和Con

16、tinue按钮的消息框 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,LRES

17、ULT CALLBACK WndProc(,) switch(message) case WM_COMMAND: switch(LOWORD(wParam) case IDM_OPEN: MessageBox(hwnd,文件已经打开!,文件打开,MB_OK); break; case IDM_SAVE: MessageBox(hwnd,文件保存成功!,文件保存,MB_OK); break; case IDM_EXIT: SendMessage(hwnd,WM_DESTROY,0,0); break; case IDM_ABOUT: /创建对话框 DialogBox(hInst,About,hw

18、nd,(DLGPROC)DlgProc); break; break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); return 0; ,41,BOOL CALLBACK DlgProc(HWND hdlg,) switch(message) case WM_INITDIALOG: /初始化对话框 return 1; case WM_COMMAND:/处理对话框消息 switch (LOWORD(wParam) case IDOK:

19、/关闭对话框 EndDialog( hdlg, 0) ; return 1; break ; case WM_CLOSE: EndDialog( hdlg, 0) ;return 1; return 0; ,42,本例的资源程序代码如下: #include #include 7_3.h Menu MENU DISCARDABLE POPUP 文件( break; case IDM_OPEN: MessageBox(hwnd,文件打开成功!,文件打开,MB_OK); break; case IDM_SAVE: MessageBox(hwnd,文件保存成功!,文件保存,MB_OK); break;

20、 case IDM_EXIT: SendMessage(hwnd,WM_DESTROY,0,0);break; case IDM_ABOUT: hdlg=CreateDialog(hInst,About,hwnd,(DLGPROC)DlgProc); break; ,48,BOOL CALLBACK DlgProc(HWND hdlg,) switch(message) case WM_INITDIALOG: /初始化消息框 return 1; case WM_COMMAND: /处理消息框消息 switch (LOWORD(wParam) case IDOK: DestroyWindow( hdlg) ;/关闭消息框 return 1 ; break; case WM_CLOSE: DestroyWindow( hdlg) ; return 1; return 0; ,本例题的资源文件与上例类似,请见教材,49,7.4 图标资源的应用,图标是代表应用程序的特殊的最小位图。在图标上双击鼠标就可以执行该应用程序,图标资源可以由VC自

温馨提示

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

评论

0/150

提交评论