版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章资源在Windows编程中的应用,内容提要,菜单与加速键资源的应用 位图资源及其应用 对话框资源及其应用 图标资源及其应用,Windows编程可用的资源,可用的资源类型 菜单 加速键 位图 对话框 图标 . 资源使用的目的便于应用程序与用户之间的交互。 创建和编辑资源的工具资源编辑器。,3.1.菜单与加速键资源及其应用,1.菜单与加速键资源的作用,菜单是窗口的重要组成部分,使用户直观地了解和使用程序的功能。 加速键可使菜单的操作更灵活快捷。 菜单组成: 主菜单 下拉式菜单框 菜单项热键标识 菜单项加速键标识 菜单项分隔线 选中的标识,2.菜单的创建过程,创建过程菜单定义和加载 菜单在资源
2、描述文件中定义 菜单名 MENU ,选项 菜单项列表 ,用以标识菜单 所具有的载入特性,资源描述文件中使用定义菜单项关键字: POPUP MENUITEM,POPUP语句定义弹出式菜单 定义形式为: POPUP“菜单项名”,选项; 在菜单项名中加符号“,WM_COMMAND消息的 字参数wParam中,包 含所选菜单项的标识,实例 在“Menu”的窗口中创建一个“文件”菜单,含有“新建”、“打开”、“关闭”、“保存”、“另存为”及“退出”等菜单项,均使用热键;并在“退出” 项前加分隔线。,#include #include “Menu.h” 菜单定义 Menu MENU MOVEABLE Me
3、nu为窗口菜单的名称 POPUP“文件( wndclass.lpszMenuName=lpszMenuName; ,动态加载菜单 调用函数SetMenu动态地加载菜单 BOLL SetMenu ( HWND hwnd, HMENU hmenu); / Hwnd为窗口句柄 / hmenu为菜单句柄 同一应用程序中,动态实现多种不同的菜单操作界面,在创建窗口时加载菜单 调用函数LoadMemu加载菜单 HMENU LoadMemu ( hInstance,lpszMenuName ); / hInstance为当前程序的实例句柄, / lpszMenuName为窗口菜单名 例如: hmenu=Lo
4、adMenu(hlnstance,Menu); hwnd=CreateWindow( ,hmenu, ,);,3. 菜单项的操作,激活或禁止菜单项(指定该项的初始状态); 设置或取消选中标志(“ ” ); 增加菜单项; 删除菜单项; 修改菜单项; .,1激活或禁止菜单项,创建菜单时,调用函数EnableMenuItem指定其初始状态 DWORD EnableMenuItem( HMENU hmenu, UlNT wIDEnableItem, /被禁止或激活的菜单项标识 UINT dwEnable) /菜单项操作标识,MF_BYCOMMAND以ID值标识菜单项 MF_ENABLED激活菜单项 M
5、F_BYPOSITION以位置标识菜单项 MF_GRAYED禁止菜单项并使其变灰显示 MF_DISABLED禁止菜单项,据dwEnable决定取菜单项 ID值或在菜单中位置。,例如,禁止弹出式菜单“文件”中的“打开”项的形式如下: EnableMenuItem(hmenu,IDM_OPEN, MF_BYCOMMAND|MF_DISABLED);,相应于ID 值指明的菜单项被禁止,2.设置或取消选中(“ ” )标志,在资源描述文件中设置菜单项的为CHECKED 调用函数CheckMenuItem设置或取消选中标志 DWORD CheckMenultem( HMENU hmen, UINT wID
6、CheckItem,/所操作的菜单项标识。 UINT dwCheck)/操作标识,据dwCheck的取该菜单项的ID值 或在菜单中位置。,MF_BYCOMMAND以ID值标识菜单项 MF_CHECKED添加选中标志 MF_BYPOSITION以位置标识菜单项 MF_UNCHECKED删除选中标志,3.增加菜单项,两种形式:尾部增加 / 菜单中插入 在菜单的尾部增加菜单项 调用函数AppendMenu加新菜单项 BOOL AppendMenu( HMENU hmenu, UINT dwFlags, /新菜单项的类型标识或其他信息 UINT dwIDNewItem, /菜单项的标识 LPCTSTR
7、 lpNewItem /菜单项内容,取决与dwFlags );,通常是插入项的ID值; 若加入弹出式菜单, 则为其句柄。,3.增加菜单项,在菜单中插入菜单项 调用函数InsertMenu加新菜单项 BOOL lnsertMenu( HMENU hmenu, UINT wPosition, /下一个菜单项的ID值或插入的位置 UINT dwFlag, /新菜单项的信息 UINT dwIDNweltem, /新菜单项的ID标识 LPCTSTR lpNewltem /菜单项的内容 );,取决于dwFlag,dwFlag对wPosition的解释: MF_BYCOMMAND 为插入位置的下一个菜单项的
8、ID值 MF_BYPOSITION 为插入的位置号,实例2 在弹出式菜单“ 文件”的“ 退出”项之前,加入新的菜单项“ 打印”的语句如下: lnsertMenu(hmenu, IDM_EXIT, MF_BYCOMMAND |MF_ENABLED, IDM_PRINT, “打印( /对wPosition的解释,若删除的菜单项 含有弹出式菜单 则同时被删除。,例如,删除弹出式“文件”菜单中的“另存为”项,可用如下语句: DeleteMenu (hmenu, IDM_SAVEAS, MF_BYCOMMAND);,5.修改菜单项,调用函数ModifyMenu可修改菜单中的某个项 BOOL Modify
9、Menu( HMENU hmenu, UINT wPosition, /指定需修改的菜单项位置 UINT dwFlag, UINT dwIDNweItem, /一般为修改后菜单项的标识 LPCTSTR lpNewItem);/一般为修改后的菜单项名,例如,修改弹出式菜单“文件”中“打开”项为“加载”项。可用如下语句: ModifyMenu(hmenu,IDM_OPEN,MF_BYCOMMAND, IDM_LOAD,“加载(,调用函数AppendMenu或InsertMenu在该菜单中加入菜单项; AppendMenu ( hmenu, /已有的菜单句柄 MF_POPUP, /创建的新弹出式菜单
10、句柄 (UINT)hmenuPopup, /该弹出式菜单的名字 lpszTitie );,例如,在窗口菜单中,动态创建弹出式菜单“编辑”的过程如下: HMENU hmenu,/主窗口菜单句柄 hPopupmenu; /创建新的菜单句柄 /定义菜单句柄 hPopumenu:CreateMenul; . /将弹出式菜单加入到菜单中 AppendMenu(hmenu,MF_POPUP,(UINT)hmenuPopup,“编辑( .,5. 加速键资源,加速键是伴随菜单的一种常用的资源。 创建加速键的步骤: 在资源描述文件中定义加速键资源; 加载加速键资源; 翻译加速键。,加速键定义的格式 加速键表名
11、ACCELERATORS 加速键的定义 其中,加速键的定义为: 键名,加速键标识(ID),类型NOINVERTALTSHIFTCONTROL,在资源描述文件中定义加速键资源,与该菜单项 标识相同,该键为标准 键/虚拟键,使用加速键时,菜单项非高亮度显示。,组合键的组合方式,与Ctrl 键组合的加速键 “char”, id 例如,“文件”菜单中“保存”项的加速键可定义为: “S” , IDM_SAVE,加速键有两种形式,使用虚拟键作为加速键nCode, id VIRTKEY 可用VK_DELETE , VK_F1等虚拟键。例如,将F1键定义为“帮助”菜单项的加速键,其形式如下: VK_F1,ID
12、M_HEILP,VIRKEY,资源描述文件定义加速键实例: /对名为“ Menu”的窗口菜单项的加速键定义: #include #includeMenu.h 菜单定义 Menu ACCELERATORS 定义加速键表 “ Menu” “ N”,IDM_NEW “ O”,IDM_OPEN “ S”,IDM_SAVE ,加载加速键资源,通过函数LoadAccelerators加载加速键资源,其形式为: HACCEL hAccel; hAccel=LoadAccelerators( hInstance,/为当前程序实例句柄 lpAcceIName/为加速键表名 );,翻译加速键,加速键可快捷切换菜单
13、项,应用程序在消息循环中必须完成加速键消息到菜单消息的翻译。 while(GetMessage( 函数TranslateAccelerators的作用对照加速键表,将相关按键消息WM_KEYDOWN和WM_KEYUP 翻译成WM_COMMAND 或WM_SYSCOMMAND的消息。 特点WM_COMMAND或WM_SYSCOMMAND消息直接发往窗口,而不在消息队列中等待。,6. 创建菜单资源实例,【例1】创建一个通用的窗口菜单的构架,用户可通过选择“文件”弹出式菜单中的“创建统计计算菜单项”动态地创建主菜单中的“统计计算”菜单项。,一个基本的菜单构架,动态的创建 “统计计算” 下拉菜单的 界
14、面,程序的实现步骤如下:,(3)调用函数DrawMenuBar重新显示改变后的窗口主菜单。 BOOL DrawMenuBar(HWND hwnd),(1)调用函数GetMenu获取窗口主菜单句柄 int GetMenu(HWND hwnd);,(2) 应用程序建立新菜单、加入菜单项并插入到主菜单的指定位置。在创建新的弹出式菜单后,应用程序还通过调用函数 EnableMenuItem禁止“创建统计计算菜单项”并将其暗淡显示。,程序在响应“文件”弹出式菜单中的“退出”项时还使用了函数SendMessage向窗口发送消息: LONG SendMessage(HWND hwnd, UINT Msg,
15、DWORD dwParam, LONG lParam) 其中:Msg为发送的消息;dwParam和lParam均为消息的附加信息。,创建“统计计算” 菜单项后,可通过选择“文件”下拉菜单中的“删除统计计算菜单项”删除创建的“统计计算”菜单项。,应用程序调用函数DeleteMenu实现删除该项,并调用函数EnableMenuItem恢复“创建统计计算菜单项”的属性。,/菜单示例.c #include #include #include #include #define IDM_NEW 10 #define IDM_OPEN 11 #define IDM_CLOSE 12 #define IDM_
16、SAVE 13 #define IDM_SAVEAS 14 #define IDM_ADDPRINTMENU 15 #define IDM_DELPRINTMENU 16 #define IDM_EXIT 17 #define IDM_CUT 18 #define IDM_COPY 19 #define IDM_PASTE 20 #define IDM_DELETE 21 #define IDM_HELP 22 #define IDM_LINE 23 #define IDM_RECT 24 #define IDM_RRECT 25 #define IDM_ELLIP 26,HMENU hmen
17、u,hprintmenu; /定义菜单句柄 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);,int WINAPI WinMain() HWND hwnd; MSG Msg; HACCEL hAccel; WNDCLASS wndclass; char lpszMenuName=Menu; char lpszClassName = 菜单; char lpszTitle= My_Menu_Example; wndclass.style = 0; wndclass.lpszClassName = lpszClassName ; if(!Regis
18、terClass( ,加载加速键资源,截获加速键消息,LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam), switch(message) case WM_COMMAND: /处理菜单消息 switch(LOWORD(wParam) case IDM_NEW: break; case IDM_OPEN:break; case IDM_SAVE:break; case IDM_SAVEAS:break; case IDM_CLOSE:break; case IDM_ADDPRINTMENU:
19、hmenu=GetMenu(hwnd); /获取主菜单句柄 hprintmenu=CreateMenu(); /动态创建菜单 AppendMenu(hprintmenu,MF_ENABLED,IDM_LINE,求和); AppendMenu(hprintmenu,MF_ENABLED,IDM_RECT,方差); AppendMenu(hprintmenu,MF_ENABLED,IDM_RRECT,平均值); AppendMenu(hprintmenu,MF_ENABLED,IDM_ELLIP,“均方根”); InsertMenu(hmenu,2,MF_POPUP|MF_BYPOSITION,
20、(UINT)hprintmenu,统计计算(,增加菜 单项,添加弹 出式统 计计算 菜单,将创建的 弹出式菜 单插入主 菜单中,改变“统计 计算”菜单 项的属性,case IDM_DELPRINTMENU: /从主菜单中删除弹出式统计计算菜单 DeleteMenu(hmenu,2,MF_BYPOSITION); /删除统计计算菜单项 EnableMenuItem(hmenu,IDM_ADDPRINTMENU,MF_ENABLED); EnableMenuItem(hmenu,IDM_DELPRINTMENU,MF_GRAYED); DrawMenuBar(hwnd); /重新显示窗口菜单 br
21、eak; case IDM_EXIT: /选择“退出”时,发出WM_DESTROY消息 SendMessage(hwnd,WM_DESTROY,0,0); break; case IDM_CUT: break; case IDM_COPY:break; case IDM_PASTE:break; case IDM_DELETE:break; break;,改变“ 文件” 菜单中有关 “ 统计计算” 菜单项的属性,case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wPara
22、m,lParam); return 0; ,对应于 WM_COMMAND 菜单消息处理,删除弹出 式统计计 算菜单,本例菜单资源文件中的部分内容 MENU MENU DISCARDABLE BEGIN POPUP 文件( 调用函数SelectObject将位图文件选入内存设备环境,才可操作位图。 操作位图束后,须调用函数DeleteDC释放内存设备环境。,2. 位图的操作过程,定义一个位图句柄 HBITMAP hBm; 加载或创建 LoadBitMap加载位图并获得位图的句柄 hBm=LoadBitMap(hinstance,lpszname); CreateCompatibleBitmap创
23、建位图 hBm=CreateCompatibleBitmap(hdc,nWidth,nHeight); 应用程序在响应消息WM_CREATE处理中,获取内存设备环境,完成加载或创建。 Hdcmem = CreateCompatibleDC(hdc);,位图名称,2. 位图的操作过程(续),选入内存设备环境 SelectObject(hdcmem,hBm); 输出 函数BitBlt将位图从内存设备环境拷贝到设备环境中。 BooL BitBlt ( HDC hdcDest, /目的设备环境句柄 int Xdest,int Ydest, /目的设备显示位图的基点 int Width,int nHei
24、tght,/用于显示位图区域的高和宽 HDC hdcScr, /源设备环境句柄 int XScr,int Yscr, /源设备中位图的左上角坐标 DWORD dwRop /位图显示方式 ),dwRop操作码说明见MSDN帮助说明,应用程序通过响应消息WM_CREATE完成加载或创建位图操作 case WM_CREATE: hdc=GetDC(hwnd);/获取设备环境 hdcmem=CreateCompatibleDC(hdc);/获取内存设备环境 /进行一系列操作 ReleaseDC(hwnd,hdc);/释放设备环境,调用函数GetObject可获取对象的信息并将其拷贝到缓冲区内。 int
25、 GetObject( HANDLE hObject,/对象句柄 int nCount,/拷贝到缓冲区的字节数 LPVOID lpObject)/接收信息的缓冲区地址 在输出位图前,可调用函数GetObject获取位图的尺寸等信息 GetObject(hbitmap,sizeof(BITMAP),(LPVOID),数据结构BITMAP含有位图的高度,宽度等信息,本例的资源文件如下: pic7_2 BITMAP pic7_2.bmp/定义位图资源,3. 位图操作实例,【例2】调用一幅图片,显示在用户窗口区。,#include #include #include #include LRESULT
26、CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HDC hdc, hdcmem;/设备环境句柄和内存设备环境句柄 HBITMAP hBm;/位图句柄 BITMAP bm;/BITMAP结构,Typedef struct tagBITMAP LONG bmType; LONG bmWidth; /宽度 LONG bmHeight;/高度 LONG bmWidthBytes;/每行字节数 WORD bmPlanes;/位面数 WORD bmBitsPixel; /每象素的bit数 LPVOID bmBits BITMAP;,int WINAPI WinMain
27、(,) HWND hwnd ; MSG Msg ; WNDCLASS wndclass; ; char lpszClassName = 位图; char lpszTitle= Example_For_BitMap; wndclass.style = 0; wndclass.lpszClassName = lpszClassName; if(!RegisterClass( ,加载位图,LRESULT CALLBACK WndProc(,) PAINTSTRUCT ps; switch(message) case WM_CREATE: hdc=GetDC(hwnd);/获取设备环境 hdcmem=
28、CreateCompatibleDC(hdc);/获取内存设备环境 ReleaseDC(hwnd,hdc);/释放设备环境 break; case WM_PAINT: hdc=BeginPaint(hwnd, ,将内存设备环境中 的位图拷贝到设备 环境中。,3.3.对话框资源及其应用,.对话框及其功能,对话框是一种弹出式窗口,直接交互的工具。 模式对话框非模式对话框 模式对话框关闭对话框前,不允许切换到其他窗口。 非模式对话框允许切换到其他窗口。 对话框资源通常有如下功能: 发送消息,如警告或提示消息; 接收输入,如用户输入的消息; 提供消息,如常见的“关于”对话框。,. 模式对话框的编程方法
29、,模式对话框的编程包括下列操作: 定义对话框资源; 显示对话框; 构造对话框消息; 关闭对话框处理函数。,1定义对话框资源,资源描述文件中定义对话框 对话框名 DIALOG载入特性选项X,Y,Width,Height设置选项 对话框的控件定义 ,位置及 外型尺寸,与菜单 资源相同,常用的有标题 和样式,即: CAPTION; STYLE()。,可用组合式,例如含标题栏的弹出式对话框: STYLE DS_MODALFRAME|WS_POPUP|WS_CAPTION,2.显示对话框,调用DialogBox函数在窗口中显示对话框 int DialogBox ( HINSTANCE hInstance
30、, /当前应用程序的实例句柄 LPCTSTR lpszDialogName, /对话框资源的名称 HWND hwndParent, /拥有该对话框的窗口句柄 WNDPROC lpDialogFunc); /对话框处理函数的地址,3.构造对话框消息处理函数,BOOL CALLBACK DlgProc(,) switch(message) case WM_INITDIALOG:return 1; case WM_COMMAND switch (LOWORD (wParam ) case ;break; case ;break; break; return 0; ,对应WN_INITDIALOG 消
31、息, 完成初始化 处理。,对应WM_COMMAND 消息,按消息字 参数(wParam) 的低位字节确定 相应的处理。,对话框消息处理函数与 主窗口函数有相似的参数,但处理内容。,4.关闭对话框,调用函数EndDialog可关闭对话框 EndDialog (hdlg,nResult) ;,调用MessageBox生成消息框模态对话框的特殊形式。 int MessageBox ( HWND hwnd,/拥有消息框的窗口 LPCTSTR lpszText, /消息框中显示的字符串 LPCTSTR lpszCaption, /标题字符串 DWORD dwType); /指定消息框的内容,标识可 组合
32、用,.消息框,3. 模态对话框应用实例,【例3】含有标题栏、系统菜单、简要信息及一个按钮控件的对话框,/7_3.cpp #include #include 7_3.h HINSTANCE hInst; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);,int WINAPI WinMain(,) HWND hwnd ; MSG Msg ;HACCEL hAccel; WNDCLASS wndclass ; char lpszMenuName=Menu
33、; char lpszClassName = 模态对话框; char lpszTitle= 模态对话框样例; wndclass.style = 0; wndclass.lpszClassName = lpszClassName ; if(!RegisterClass( ,LRESULT CALLBACK WndProc(,) switch(message) case WM_COMMAND: switch(LOWORD(wParam) case IDM_NEW: break; case IDM_OPEN: MessageBox(hwnd,文件已经打开!,文件打开,MB_OK);break; ca
34、se IDM_SAVE: MessageBox(hwnd,文件保存成功!,文件保存,MB_OK);break; case IDM_SAVEAS: break; case IDM_CLOSE: break; case IDM_EXIT: SendMessage(hwnd,WM_DESTROY,0,0); break; case IDM_CUT: break; case IDM_COPY: break; case IDM_PASTE: break; case IDM_DELETE: break; case IDM_ABOUT: DialogBox(hInst,About,hwnd,(DLGPROC
35、)DlgProc); break; break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,message,wParam,lParam); return 0; ,创建对话框,创建消息框,BOOL CALLBACK DlgProc(,) /对话框窗口处理函数 switch(message) case WM_INITDIALOG: /对话框初始化 return 1; case WM_COMMAND: /处理对话框消息 switch (LOWORD(wParam) case IDOK:
36、 /关闭对话框 EndDialog(hdlg, 0); return 1; break ; case WM_CLOSE: EndDialog(hdlg, 0); return 1; return 0; ,/本例的资源程序代码如下: #include #include 7_3.h Menu MENU DISCARDABLE POPUP 文件(/对话框处理函数地址,应有此项, 否则无法 显示。,应有标题,以便窗口 间切换。,2 .创建对话框函数,3.消息循环部分的处理,调用函数DestroyWindow关闭非模态对话框。 DOOL DestroyWindow (HWND hdlg),消息循环中必须
37、能截获发往非模态对话框的消息,并送到相应的对话框处理函数去处理。其消息循环一般形式:: while (GetMessage ( ,若为发往非模态对话框的消息,则发送到DlgProc处理。,4.关闭对话框的函数,5.非模态对话框应用实例,【例4】不关闭“关于”窗口,仍可操作 “文件”下拉菜单,如选其中的“创建”选项,即可弹出“创建”窗口。,/3-4.cpp #include #include 7-4.h HWND hdlg; /对话框句柄 HINSTANCE hInst; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); BOOL CALLBA
38、CK DlgProc(HWND,UINT,WPARAM,LPARAM);,int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst, LPSTR lpszCmdLine,int nCmdShow) HWND hwnd ; MSG Msg ;HACCEL hAccel; WNDCLASS wndclass ; char lpszMenuName=Menu; char lpszClassName = 非模态对话框; char lpszTitle= 非模态对话框演示程序; wndclass.style = 0; wndclass.lpszC
39、lassName = lpszClassName ; if(!RegisterClass( ,截获非模态对话框的消息,并发送到DlgProc处理。,LRESULT CALLBACK WndProc(,) switch(message) case WM_COMMAND: switch(LOWORD(wParam) case IDM_NEW: MessageBox(hwnd,文件创建成功!,文件创建,MB_OK); break; case IDM_OPEN: MessageBox(hwnd,文件打开成功!,文件打开,MB_OK); break; case IDM_SAVE: MessageBox(
40、hwnd,文件保存成功!,文件保存,MB_OK); break; case IDM_SAVEAS: break; case IDM_CLOSE: break; case IDM_EXIT: SendMessage(hwnd,WM_DESTROY,0,0); break; case IDM_ABOUT: hdlg=CreateDialog(hInst,About,hwnd,(DLGPROC)DlgProc); break; break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd,m
41、essage,wParam,lParam); return 0; ,创建非 模态对 话框。,6.通用对话框资源,Windows系统提供了一系列常用的通用对话框,例如“颜色”、“打开”、“保存”等,这些对话框模板在COMMDLG.h中。 创建通用对话框的两个步骤: 填充对话框模板结构; 调用函数显示对话框。,1.填充对话框模板数据结构,系统通用对话框模板数据结构有如下所列: OPENFILENAME 打开文件对话框模板数据结构 CHOOSECOLOR 选择颜色对话框模板数据结构 CHOOSEFONT 选择字体对话框模板数据结构 PRINTDLG 打印对话框模板数据结构 PAGESETUPDLG
42、页面设置对话框模板数据结构 FINDREPLACE 查找对话框模板数据结构 其中最常用的是OPENFILENAME, OPEN和SAVE AS对话框,都使用该结构完成定义。,OPENFILENAME数据结构的定义如下: typedef struct tagOPENFILENAME DWORD iStructSize; /本数据结构的长度 HWND hwndOwner; /所在的窗口句柄 HANDLE hInstance; /对话框模板句柄 LPCSTR lpstrFilter;/初始文件过滤器标识字符串 LPSTR lpstrCustomFilter;/客户过滤器的标识字符串 DWORD nM
43、axCustFilter;/客户过滤器缓冲区的大小 DWORD nFilterIndex; /文件过滤器正文串的索引值 LPSTR lpstrFile;/文件名列表框中文件的指针 DWORD nMaxFile;/文件名列表缓冲区的大小 LPSTR lpstrFileTitle;/选定文件名的指针 DWORD nMaxFileTitle;/选定文件名缓冲区的大小,LPCSTR lpstrInitialDir;/对话框初始文件目录文件的指针 LPCSTR lpstrTitle;/对话框的标题 DWORD Flags;/对话框的标志 UINT nFileOffset;/从路径名到文件名的偏移 UIN
44、T nfiIeExtension; /从路径名到文件扩展名的偏移 LPCSTR lpstrDefExt;/缺省扩展名的指针 LPARAM lCustData;/应用程序自定义的数据,将其传给相应lpfnHook确定的钩子函数 UINT (CALLBACK * lpfnHook)(HWND,UINT,WPARAM,LPARM) LPCSTR lpTemplateName;/对话模板的标签 OPENFILENAME;,2.调用函数显示对话框,用以显示通用对话框的API函数:。 ChooseFont 显示“字体”对话框 ChooseColor 显示“颜色”对话框 FindText 显示“查找”对话框
45、 GetOpenFileName 显示“文件”对话框 GetSaveFileName 显示“保存”对话框 PageSetupDlg 显示“页面设置”对话框 PrintDlg 显示“打印”对话框 ReplaceText 显示“替换”对话框 例如,调用GetOpenFileName显示“OPEN”对话框: GetOpenFileName( /定义一个OPENFILENAME结构 HINSTANCE hInst; LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPAR
46、AM);,int WINAPI WinMain(,) HWND hwnd; MSG Msg; HACCEL hAccel; WNDCLASS wndclass ; char lpszMenuName=Menu; char lpszClassName = 通用对话框; char lpszTitle= 通用对话框样例; wndclass.style = 0; wndclass.lpszClassName = lpszClassName ; if(!RegisterClass( ,LRESULT CALLBACK WndProc(,) static char szFilter = Text File
47、s (*.TXT)0*.txt0 All Files (*.*)0*.*00; static char lpstrFileName=; switch(message) case WM_CREATE: /初始化对话框结构 ofn.lStructSize = sizeof (OPENFILENAME); ofn.hwndOwner = hwnd; ofn.hInstance = NULL; ofn.lpstrFilter = szFilter; ofn.Flags = 0; ofn.lCustData = 0; ofn.lpfnHook = NULL; ofn.lpTemplateName = N
48、ULL; break;,case WM_COMMAND: switch(LOWORD(wParam) case IDM_NEW:break; case IDM_OPEN: /设置“打开”对话框 ofn.lpstrFile=lpstrFileName; ofn.Flags=OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST|OFN_HIDEREADONLY; ofn.lpstrTitle=打开; GetOpenFileName( /显示“另存为”对话框,case IDM_CLOSE: break; case IDM_EXIT: SendMessage(hwnd,WM_DE
49、STROY,0,0); break; case IDM_ABOUT: MessageBox( hwnd, “通用对话框示例” , “关于”, MB_OK ); break; break; case WM_DESTROY: PostQuitMessage(0); break; default: return; DefWindowProc(hwnd,message,wParam,lParam); return 0; ,3.4.图标资源及其应用,1. 图标资源的操作,图标是特殊的最小位图。 图标操作类似于前述的位图操作,包括: 图标的创建; 在资源文件中的定义; 图标的加载。,1.图标资源的创建,用户可以利用系统提供的图标; 也可通过图形编辑器自定义图标形式; 图标保存在扩展名为.ico的文件中。,系统提供的图标标识和形状 IDI_APPLICATION 缺省图标 IDI_ASTERISK信息图标 IDI_EXCLAMATION 惊叹号图标 IDI_HA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 员工心态培训课程
- 2026年及未来5年市场数据中国客户端游戏行业市场深度评估及投资战略规划报告
- 群体心理干预模式
- 2025版甲状腺功能亢进症状辨识及护理指南
- 《电机与电气控制技术》考核与评分标准 项目二 基本电气控制单元线路的连接与调试
- 刑事控告委托书
- 建筑工程监理单位施工进度监测方案与建议手册
- 文档版本控制及协同编辑平台
- 高效完成目标承诺书3篇
- 多项目协同管理标准模板
- 2026年全国中学生生物学联赛试卷及答案解析
- 2025年黑龙江大庆市初二学业水平地理生物会考真题试卷(含答案)
- 第22课 在线学习新变革 课件(内嵌视频) 2025-2026学年人教版初中信息科技七年级全一册
- 2026国家广播电视总局直属事业单位招聘166人备考题库(北京)及答案详解(历年真题)
- 【中考真题】2025年上海英语试卷(含听力mp3)
- 2024年缙云县国有资产投资经营集团有限公司招聘笔试冲刺题(带答案解析)
- 林夕歌词集完整版本
- 公路路基施工技术规范 JTG∕T 3610-2019
- 电商运营中心组织架构及岗位职责
- 4微检查 高中语文必背古诗文60篇打卡表
- 初中音乐《我和你》说课逐字稿
评论
0/150
提交评论