欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    第7章资源在Windows编程中的应用.ppt

    • 资源ID:5030322       资源大小:767KB        全文页数:76页
    • 资源格式: PPT        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第7章资源在Windows编程中的应用.ppt

    第7章 资源在Windows编程中的应用,在Windows应用程序中可以使用几种不同类型的资源,加速键 位图 对话框 和菜单等,菜单是Windows图形用户界面中窗口的重要组成部分,菜单可使用户直观 地了解并使用应用 程序所提供的功能,加速键可使菜单的操作更灵活快捷,两种资源往往密不可分,7.1菜单与加速键资源,用以标识菜 单所具有的 载入特性,菜单定义结构,菜单名,MENU关键字,载 入 特 性 选 项,菜单项,7.1.1菜单的创建过程,POPUP语句定义弹出式菜单,其形式为: POPUP“菜单项名”,选项; 在菜单项名中加入符号“&”可定义该菜单项的热键。例如: POPUP“编辑(&E)”; 该菜单项使用Alt+E键作为热键。 菜单项的常用选项及其说明见下表。,POPUP定义的弹出式菜单项还包含子菜单,MENUITEM语句用于定义菜单项,其形式为: MENUITEM“菜单项名”菜单项标识(ID),选项,WM_COMMAND消息中 字参数wParam中包 含选中菜单项的标识,使用下面的语句可创建菜单中的水平分隔符: MENUITEM SEPARATOR;,例 在“Menu”的窗口中创建一个“文件”菜单。该菜单含有“新建”、“打开”、“关闭”、“保存”、“另存为”及“退出”等菜单项。菜单项均使用热键;并且“退出” 项与其他菜单项之间用分隔线分开。,#include #include “Menu.h” 菜单定义 Menu MENU MOVEABLE Menu为窗口菜单的名称 POPUP“文件(&F)”定义“文件”弹出式菜单 MENUITEM “新建(&N)”,IDM_NEW MENUITEM “打开(&O)”,IDM_OPEN MENUITEM “关闭(&C)”, IDM_CLOSE MENUITEM “保存(&S)”,IDM_SAVE MENUITEM “另存为(&A)”,IDM_SAVEAS MENUITEM SEPARATOR 分隔线 MENUITEM “退出(&X)”,IDM_EXIT ,2.加载菜单资源, WNDCLASS wndclass; wndclass.lpszMenuName=lpszMenuName;,1. 在窗口类 中加载菜单,应用程序需先调用函数LoadMemu加载菜单 HMENU LoadMemu ( hInstance,/当前程序的实例句柄 lpszMenuName /窗口菜单名 ); 如: hmenu=LoadMenu(hlnstance,“Menu“); hwnd=CreateWindow( ,hmenu, ,);,2. 在创建 窗口时 加载菜单,3. 动态加 载菜单,应用程序获取菜单句柄后,可通过SetMenu动态地加载菜单 BOLL SetMenu ( / HWND为窗口句柄,HMENU为菜单句柄 HWND hwnd, HMENU hmenu);,在应用程序中加载菜单有三种方法,可在同一个应用 程序中实现多种 不同的菜单操作界面,菜单操作,禁止或激活菜单项(指定该菜单项的初始状态) 设置或取消选中标志(“” ) 增加、删除或修改菜单项等操作,7.1.2菜单项的操作,创建菜单时,可以调用函数EnableMenuItem改变其初始状态 DWORD EnableMenuItem( HMENU hmenu, UlNT wIDEnableItem, /被禁止或激活的菜单项标识 UINT dwEnable) /dwEnable为菜单项操作标识,MF_BYCOMMAND 以ID值标识菜单项 MF_ENABLED 激活菜单项 MF_BYPOSITION 以位置标识菜单项 MF_GRAYED 禁止菜单项并使其变灰显示 MF_DISABLED 禁止菜单项,菜单项的ID值/在菜单中位置,例如,禁止弹出式菜单“文件”中的“打开”项的形式如下: EnableMenuItem(hmenu,IDM_OPEN, MF_BYCOMMAND|MF_DISABLED);,1. 禁止或激活菜单项,(1) 在资源描述文件中设置菜单项的为CHECKED (2) 调用函数CheckMenuItem设置或取消选中标志,DWORD CheckMenultem( HMENU hmen, UINT wIDCheckItem,/设置或取消选中标志的菜单项标识 UINT dwCheck) /操作标识,据dwCheck的取值,可为 该菜单项的ID值或为该 菜单项在菜单中位置,MF_BYCOMMAND 表明以ID值标识菜单项 MF_CHECKED 添加选中标志 MF_BYPOSITION 表明以位置标识菜单项 MF_UNCHECKED 删除选中标志,2. 设置或取消选中(“ ” )标志,两种形式:尾部增加 / 菜单中插入,3. 增加菜单项,例如: 在弹出式菜单“ 文件”的“ 退出”项之前加入新的菜单项“ 打印”的语句 lnsertMenu (hmenu, IDM_EXIT, MF_BYCOMMAND |MFENABLED, IDM_PRINT,“打印(&P)”);,例如在弹出式菜单“文件”的末尾增加一项“关于”的形式如下: AppendMenu(hmenu,MF_ENABLED,IDM_ABOUT,“关于(&A)”);,应用程序可调用函数DeleteMenu 删除菜单项 BOOL DeleteMenu( HMENU hmenu, UINT wPosition,/要删除菜单项的位置 UINT dwFlag); /对wPosition的解释 例如,删除弹出式“文件”菜单中的“另存为”项的形式如下: DeleteMenu (hmenu, IDM_SAVEAS, MF_BYCOMMAND),若删除的菜 单项含有弹出式菜单 则同时被删除。,4. 删除菜单项,调用函数ModifyMenu可修改菜单中的某个项 BOOL ModifyMenu( HMENU hmenu, UINT wPosition, /指定需修改的菜单项位置 UINT dwFlag, UINT dwIDNweItem, /一般为修改后菜单项的标识 LPCTSTR lpNewItem); /一般为修改后的菜单项名,例如修改弹出式菜单“文件”中“打开”项为“加载”项的语句如下: ModifyMenu(hmenu,IDM_OPEN,MF_BYCOMMAND,IDM _LOAD“加载(&L)”);,5.修改菜单项,1. 调用函数createmenu创建空的弹出式菜单 HMENU CreateMenu (void),2. 调用函数AppendMenu或InsertMenu在该菜单中 加入菜单项 AppendMenu ( hmenu, /已有的菜单句柄 MF_POPUP, /创建的新弹出式菜单句柄 (UINT)hmenuPopup, /该弹出式菜单的名字 lpszTitie );,动态地创建菜单可使系统资源更加节省,创建菜单分两个步骤:,7.1.3菜单的动态创建,例如,在窗口菜单中动态创建弹出式菜单“编辑”的过程如下: HMENU hmenu,/主窗口菜单句柄 hPopupmenu; /创建新的菜单句柄 ,定义菜单句柄 hPopumenu:CreateMenul; ,/在弹出式菜单中增加菜单项 AppenMenu(hPopupmenu,MF_STRWG,IDM_COPY,“复制(&E)”);,/将弹出式菜单加入到菜单中 AppendMenu(lmenu,MF_POPUP,(UINT)hmenuPopup,“编辑(&E)”);,常伴随菜单使用的一种非常有用的资源,创建加速键的步骤,1.在资源描述文件中定义加速键资源,2.加载加速键资源,3.翻译加速键,7.1.4加速键资源,常用的加速键有两种形式: “char”, id 与Ctrl 键组合的加速键。例如“文件”菜单中“保存”项的加速键可定义为: “S” , IDM_SAVE, nCode, id VIRTKEY 使用虚拟键作为加速键。如VK_F1,VK_DELETE等。例如将F1键定义为“帮助”菜单项的加速键,其形式如下: VK_F1,IDM_HELP,VIRKEY,下面是资源描述文件对名为“ Menu”的窗口菜单项的加速键定义: #include #include“Menu.h“ 菜单定义 加速键表定义 Menu ACCELERATORS 加速键表名为“Menu” “ N”,IDM_NEW “ O”,IDM_OPEN “ S”,IDM_SAVE ,1加载加速键资源,通过函数LoadAccelerators加载加速键资源,其形式为: HACCEL hAccel; hAccel=LoadAccelerators ( hInstance, / hInstance为当前程序实例句柄 lpAcceIName / lpAccelName为加速键表名 );,2翻译加速键,使用加速键可实现菜单项快捷切换,应用程序在消息循环中必须完成加速键消息到菜单消息的翻译。 while(GetMessage(&Msg,NULL,0,0) if(!TranslateAccelerators (hwnd,hAccel,&Mag) TranslateMessage(&Msg); DispatchMessage(&Msg); ,函数TranslateAccelerators是翻译操作的核心 int TranslateAccelerators ( HWND hwnd, /为窗口句柄 HACCEL hAccel, /为加速键表句柄 lpMSG lpMsg /为指向MSG结构的指针 ),【例7-1】菜单资源及其创建。 本例创建一个通用的窗口菜单的构架,用户可通过选择“文件”弹出式菜单中的“创建统计计算菜单项”动态地创建主菜单中的“统计计算”菜单项。 图7-1是一个基本的菜单构架,图7-2是动态创建“统计计算”下拉菜单的界面。,图7-1,图7-2,7.1.5 创建菜单资源实例,该程序的实现步骤如下:,(3)调用函数DrawMenuBar重新显示改变后的窗口主菜单。 BOOL DrawMenuBar(HWND hwnd),(1) 用GetMenu获取窗口主菜单句柄 int GetMenu(HWND hwnd);,(2) 应用程序建立新菜单、加入菜单项并插入到主菜单的指定位置。在创建新的弹出式菜单后,应用程序还通过调用函数 EnableMenuItem禁止“创建统计计算菜单项”并将其暗淡显示。,函数SendMessage 在应用程序中经常使用,其功能是向窗口发送消息 LONG SendMessage(HWND hwnd, UINT Msg, DWORD dwParam, LONG lParam) 其中:Msg为发送的消息;dwParam和lParam均为消息的附加信息。,创建“统计计算” 菜单项后,可通过选择“文件”下拉菜单中的“删除统计计算菜单项”删除创建的“统计计算”菜单项。,应用程序调用函数DeleteMenu删除该菜单项,并调用函数EnableMenuItem恢复“创建统计计算菜单项”的属性。此外,该程序在响应“文件”弹出式菜单中的“退出”项时还使用了函数SendMessage。,/菜单示例.c #include #include #include #include #define IDM_NEW 10 #define IDM_OPEN 11 #define IDM_CLOSE 12 #define IDM_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 hmenu,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(!RegisterClass( ,加载加速键资源,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: 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, (UINT)hprintmenu,“统计计算(,增加菜 单项,添加弹 出式统 计计算 菜单,将创建的 弹出式菜 单插入主 菜单中,改变“统计 计算”菜单 项的属性,case IDM_DELPRINTMENU: /从主菜单中删除弹出式统计计算菜单 DeleteMenu(hmenu,2,MF_BYPOSITION); /删除统计计算菜单项 EnableMenuItem(hmenu,IDM_ADDPRINTMENU,MF_ENABLED); EnableMenuItem(hmenu,IDM_DELPRINTMENU,MF_GRAYED); DrawMenuBar(hwnd); /重新显示窗口菜单 break; 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,wParam,lParam); return 0; ,对应case WM_COMMAND菜单消息,本例菜单资源文件中的部分内容 MENU MENU DISCARDABLE BEGIN POPUP “文件(&F)“ BEGIN MENUITEM “新建(&N)t Ctrl+N“, IDM_NEW MENUITEM “打开(&O)t Ctrl+O“, IDM_OPEN MENUITEM “关闭(&C)“, IDM_CLOSE MENUITEM SEPARATOR MENUITEM “保存(&S)t Ctrl+S“, IDM_SAVE MENUITEM “另存为(&A)“, IDM_SAVEAS MENUITEM SEPARATOR MENUITEM “创建统计计算菜单项(&P)t Ctrl+P“,IDM_ADDPRINTMENU MENUITEM“删除统计计算菜单项(&D)tCtrl+D“,IDM_DELPRINTMENU,GRAYED MENUITEM SEPARATOR MENUITEM “退出(&X)“, IDM_EXIT END POPUP “编辑(&E)“ BEGIN MENUITEM “剪切(&T)t Ctrl+X“, IDM_CUT MENUITEM “复制(&C)t Ctrl+C“, IDM_COPY MENUITEM “粘贴(&P)t Ctrl+V“, IDM_PASTE MENUITEM “删除(&D)t Del“, IDM_DELETE END MENUITEM “帮助(&H)“, IDM_HELP END,本例中的加速键 MENU ACCELERATORS MOVEABLE PURE BEGIN “N“, IDM_NEW, ASCII “O“, IDM_OPEN, ASCII “S“, IDM_SAVE, ASCII “P“, IDM_ADDPRINTMENU, ASCII “D“, IDM_DELPRINTMENU, ASCII “X“, IDM_CUT, ASCII “C“, IDM_COPY, ASCII “V“, IDM_PASTE, ASCII VK_DELETE, IDM_DELETE, VIRTKEY END,创建一个菜单,其中有三个菜单项,分别为“文件”、“计算”和“帮助”,其中,“文件”菜单项包含“打开”、“保存”、“另存为”、“退出”等菜单选项;“计算”菜单包含“总和”、“方差”、“均方根”等菜单选项;“帮助”菜单项包含“计算总和帮助”、“计算方差帮助”和“计算均方根帮助”以及“关于”等项。,WndClass.lpszMenuName=“Menu”;/定义菜单名,定义及加载菜单资源实例,资源文件 Menu MENU DISCARDABLE /定义菜单条 POPUP “文件(&F)“ /定义弹出菜单 MENUITEM “打开(&O)“,IDM_NEW /定义打开菜单 MENUITEM “保存(&S)“,IDM_SAVE /定义保存菜单 MENUITEM “另存为(&A)“,IDM_SAVEAS /定义保存为菜单 MENUITEM SEPARATOR /定义分割条 MENUITEM “退出(&E)“,IDM_EXIT /定义退出菜单 POPUP “计算(&S)“ /定义弹出菜单 MENUITEM “计算总和(&S)“,IDM_SUM /定义计算总和菜单 MENUITEM “计算方差(&D)“,IDM_DEVIA /定义计算方差菜单 MENUITEM “计算均方差(&T)“,IDM_STDDEVIA /计算均方差菜单 POPUP “帮助(&H)“ /定义帮助弹出菜单 MENUITEM “计算总和帮助(&S)“,IDM_SUMHELP /计算总和帮助菜单 MENUITEM “计算方差帮助(&D)“,IDM_DEVIAHELP /计算方差帮助菜单 MENUITEM “计算均方差帮助(&T)“,IDM_STDDEVIAHELP /计算均方差帮助菜单 MENUITEM SEPARATOR /定义分割条 MENUITEM “关于(&A)“,IDM_ABOUT /定义关于菜单 ,在上例的基础上增加新功能。若在用户区内按下鼠标左键,则动态创建一个包括“删除计算总和”、“添加计算平均值”和“修改计算均方差”三个菜单项的弹出式菜单,由此菜单控制“计算”菜单中菜单项的删除、添加与修改。(要求新的弹出式菜单开始时不可用,按下右键后变为可用。),单击“修改计算均方差”菜单项后,“计算”菜单下的“计算均方差”项改为“线性拟合”,单击“添加计算平均值”菜单项后,“计算”菜单中添加上了“计算平均值”菜单项。,菜单项操作实例,long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) static BOOL create=TRUE; switch(iMessage) case WM_LBUTTONDOWN: /按下鼠标左键后响应的消息 if(create=TRUE) hChildMenu=CreateMenu(); hMenu=GetMenu(hWndMain); AppendMenu(hChildMenu,MF_GRAYED,IDM_DELETE,“删除计算总和“); AppendMenu(hChildMenu,MF_GRAYED,IDM_ADD,“添加计算平均值“); AppendMenu(hChildMenu,MF_GRAYED,IDM_MODIFY,“修改计算均方差“); InsertMenu(hMenu,3,MF_POPUP|MF_BYPOSITION,(UINT)hChildMenu,“修改菜单“); DrawMenuBar(hWndMain); create=FALSE; break;,case WM_RBUTTONDOWN: if(create=FALSE) EnableMenuItem(hMenu,IDM_DELETE,MF_ENABLED|MF_BYCOMMAND); EnableMenuItem(hMenu,IDM_ADD,MF_ENABLED|MF_BYCOMMAND); EnableMenuItem(hMenu,IDM_MODIFY,MF_ENABLED|MF_BYCOMMAND); break;,case WM_COMMAND: if(wParam=IDM_DELETE) DeleteMenu(hMenu,IDM_SUM,MF_BYCOMMAND); else if(wParam=IDM_ADD) InsertMenu(hMenu,IDM_DEVIA,MF_BYCOMMAND|MF_ENABLED,IDM_AVERAGE,“计算平均值“); else if(wParam=IDM_MODIFY) ModifyMenu(hMenu,IDM_STDDEVIA,MF_BYCOMMAND,IDM_NIHE,“线性拟合“); else ; break;,case WM_DESTROY: PostQuitMessage(0); return 0; default: return(DefWindowProc(hWnd,iMessage,wParam,lParam); return 0; ,1位图概念,为提高显示刷新速度,位图操作须在内存中进行。用于位图操作的设备环境为内存设备环境。用函数CreateCompatibleDC向系统申请获取内存设备环境。 hdcmem = CreateCompatibleDC(hdc);,内存设备环境也有设备描述表。获取内存设备环境后,还要调用SelectObject将位图文件选入内存设备环境,才可在内存设备环境中操作位图,操作位图结束后,应用程序须调用DeleteDC释放内存设备环境。 DeleteDC(hdcmem); /hdcmem:内存设备环境句柄,7.2 位图资源及其应用,2. 位图的操作过程,应用程序通过响应消息WM_CREATE完成加载或创建位图操作 case WM_CREATE: hdc=GetDC(hwnd); /获取设备环境 hdcmem=CreateCompatibleDC(hdc); /获取内存设备环境 /进行一系列操作 ReleaseDC(hwnd,hdc); /释放设备环境,另外,在输出位图之前,经常要调用GetObject获取位图的尺寸函数GetObject的作用是获取指定对象的信息并将其拷贝到指定的缓冲区内。 int GetObject ( HANDLE hObject, /对象句柄 int nCount, /拷贝到缓冲区的字节数 LPVOID lpObject /接收信息的缓冲区地址 ),【例7-2】位图操作示例。本例调用一幅图片,并在用户窗口区上显示。,本例的资源文件如下: forest BITMAP forest.bmp /定义位图资源,3. 位图操作实例,1. #include #include 2. #include #include 3. LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 4. HDC hdc, hdcmem; /设备环境句柄和内存设备环境句柄 5. HBITMAP hBm; /位图句柄 6. BITMAP bm; /BITMAP结构 7. int WINAPI WinMain(,) 8. HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; 9. char lpszClassName = “位图“; 10. char lpszTitle= “Example_For_BitMap“; 11. wndclass.style = 0; 12. 13. wndclass.lpszClassName = lpszClassName; 14. if( !RegisterClass( 23. ,LRESULT CALLBACK WndProc(,) PAINTSTRUCT ps; switch(message) case WM_CREATE: hdc=GetDC(hwnd); /获取设备环境 hdcmem=CreateCompatibleDC(hdc); /获取内存设备环境 ReleaseDC(hwnd,hdc); /释放设备环境 break; case WM_PAINT: hdc=BeginPaint(hwnd, ,对话框资源通常有如下功能: 发送消息如警告消息、提示框消息 接收输入如用户输入的消息 提供消息如常见的“关于”对话框,不允许用户在关闭对话框之前切换到应用程序的其他窗口,允许用户在该对话框与应用程序其他窗口之间的切换,7.3 对话框资源及其应用,7.3.1 模式对话框的编程方法,对话框消息处理函数具有与主窗口函数相似的参数,但两者存在不同,在对话框消息处理函数中常响应以下两类消息: (a)WN_ INITDIALOG 消息 完成其初始化操作,在功能上与主窗口函数的WM_COMMAND消息相似。 (b)WM_COMMAND消息 通过查看消息字参数(wParam)中的低位字节,与控件标识(ID)相比较,以确定产生交互请求的控件并据此转入相应的处理过程处理。,消息框是模态对话框的特殊形式,调用MessageBox生成消息框 int MessageBox (HWND hwnd, /拥有消息框的窗口 LPCTSTR lpszText, /消息框中显示的字符串 LPCTSTR lpszCaption,/作为标题的字符串 DWORD dwType /指定消息框的内容 ),这些标识可以组合使用,【例7-3】该对话框含有标题栏、系统菜单、简要信息及一个按钮控件。,7.3.2 模态对话框应用实例,#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“; 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; case 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)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: /关闭对话框 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 “文件(&F)“ MENUITEM “新建(&N)t Ctrl+N“, IDM_NEW MENUITEM “打开(&O)t Ctrl+O“, IDM_OPEN MENUITEM “关闭(&C)“, IDM_CLOSE MENUITEM SEPARATOR MENUITEM “保存(&S)t Ctrl+S“, IDM_SAVE MENUITEM “另存为(&A)“, IDM_SAVEAS MENUITEM SEPARATOR MENUITEM “退出(&X)“, IDM_EXIT POPUP “编辑(&E)“ MENUITEM “剪切(&T)t Ctrl+X“, IDM_CUT MENUITEM “复制(&C)t Ctrl+C“, IDM_COPY MENUITEM “粘贴(&P)t Ctrl+V“, IDM_PASTE MENUITEM “删除(&D)t Del“, IDM_DELETE POPUP “帮助(&H)“ MENUITEM “关于(&A).“, IDM_ABOUT ,Menu ACCELERATORS “N“, IDM_NEW “O“, IDM_OPEN “S“, IDM_SAVE “X“, IDM_CUT “C“, IDM_COPY “V“, IDM_PASTE VK_DELETE, IDM_DELETE, VIRTKEY About DIALOG 10, 10, 100, 50 STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION “关于“ FONT 18, “楷体“ /定义对话框中的文本字体类型及大小 CTEXT “Windows模态对话框“,-1,13,10,80,10 DEFPUSHBUTTON “确定“,IDOK,35,30,30,12 ,1 定义对话框样式 非模态对话框的定义一般形式如下: STYLE WS_POPUP | WS_CAPTION | WS_VISIBLE 非模态对话框允许与应用程序的其他窗口之间进行切换,因此标识该对话框内容的标题一般不可省略。,非模态对话框编程方法,与模态对话框的编程较类似,但略有差别,2 创建对话框函数 HWND CreateDialog ( HINSTANCE hInstance, /当前应用程序实例句柄 LPCTSTR lpszDialogName, /对话框名 HWND hwndParent, /拥有该对话框的窗口句柄 WNDPROC lpDialogFunc /对话框处理函数地址 ),无此项则无法在屏幕上显示,7.3.3 非模态对话框的编程方法,3 消息循环部分的处理 由于非模态对话框允许应用程序向其他窗口发送消息,因此,消息循环中必须具备截获发往非模态对话框的消息的能力,并送到相应的对话框处理函数进行处理。其消息循环过程的一般形式为: while (GetMessage ( ,判断是否为发往非模态对话框的消息,若是,则将消息发送到WndProc进行处理,4 关闭对话框的函数 非模态对话框调用函数DestroyWindow关闭对话框: DOOL DestroyWindow (HW

    注意事项

    本文(第7章资源在Windows编程中的应用.ppt)为本站会员(韩长文)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开