lt2_windows programming

上传人:biao****biao 文档编号:243154038 上传时间:2024-09-17 格式:PPT 页数:40 大小:659KB
返回 下载 相关 举报
lt2_windows programming_第1页
第1页 / 共40页
lt2_windows programming_第2页
第2页 / 共40页
lt2_windows programming_第3页
第3页 / 共40页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,二讲,Windows,编程思想,和,MFC,应用程序框架,1,1.Windows,编程思想,Windows,应用程序的基本概念,Windows,应用程序中的数据类型,Windows,应用程序的消息机制,Windows,操作系统与,Windows,应用程序的主函数、窗口函数之间的关系,2,与,DOS,应用程序不同,,Windows,应用程序一般采用,图形化的窗口界面,,界面,是由各种图形元素组成的,包括窗口、菜单、按钮、对话框、图标、滚动条等等。,1.1,Windows,应用程序的基本概念,3,Windows,应用程序的用户主要是通过键盘和鼠标对应用程序界面上的图形元素进行操作来与,Windows,应用程序进行交互的。当用户敲击键盘或按下鼠标键时,系统就会产生一条特定的消息,,Windows,将产生的消息放入应用程序的消息队列,应用程序的,WinMain,函数从队列中提取消息并送到相应的窗口函数,窗口函数再根据消息类型调用相应的处理过程。,4,在,Windows,应用程序中,存在着许多与,DOS,应用程序不同,的复杂类型对象,,,如窗口、设备环境、光标、按钮、滚动条等等。,Windows,使用,句柄,,一个,32,位的整数值,来标识应用程序中的不同对象和不同实例。,应用程序通过句柄可以访问相应的对象信息。,5,6,Windows,提供了大量预定义的用,C,语言编写的函数,即应用程序编程接口,API (,Application Programming Interface,),。,Windows API,是,Windows,系统,和,Windows,应用程序,之间的标准程序接口,.,窗口管理函数,图形设备函数,系统服务函数,根据功能,Windows API,可以分为三类,:,7,Windows,应用程序中的数据量非常大,为了提高应用程序的可读性,,Windows,给许多基本数据类型定义了别名,例如:,Typedef,unsigned long,DWORD,;,Typedef,int,BOOL,;,typedef,unsigned char,BYTE,;,typedef,unsigned short,WORD,;,等等。,1.2,Windows,应用程序中的数据类型,8,Windows,应用程序还使用了一些结构类型的数据,,typedef,struct_POINT,LONG,x,y,;,POINT;,9,typedef,struct,_ WNDCLASS,UINT style;,WNDPROC,lpfnWndProc,;,int,cbClsExtra,;,int,cbWndExtra,;,HANDLE,hInstance,;,HICON,hIcon,;,HCURSOR,hCursor,;,HBRUSH,hbrBarckground,;,LPCTSTR,lpszMenuName,;,LPCTSTR,lpszClassName,;,WNDCLASS;,typedef,struct_RECT,LONG left;,LONGtop;,LONGright;,LONGbottom;,RECT;,矩形数据结构,窗口数据结构,10,事件与消息,typedef,struct,_ MSG,HWND,hwnd,;,UINTmessage;,WPARAM,wParam,;,LPARAM,lParam,;,DWORD time;,POINTpt;,MSG;,这是一个,事件,事件的描述是一个,消息,1.3,Windows,应用程序的消息机制,11,消息有很多类型,不同的前缀符号经常用于消息宏识别消息的类属。,BM,表示按钮控件消息,CB,表示组合框控件消息,WM,表示窗口消息,12,13,while(GetMessage(&msg,NULL,NULL,NULL,),TranslateMessage(&msg,);,DispatchMessage(&msg,);,自消息队列获取消息,把消息传送到窗口函数,将消息转换为字符信息,消息循环,14,1.4,Windows,应用程序的结构,主函数,窗口函数,15,WinMain,函数是所有,Windows,应用程序的入口。它实现以下三个功能:,定义并注册窗口类,创建窗口,进入消息循环,int,WINAPI,WinMain,(,HINTANCE,hThisInst, /,应用程序当前实例句柄,HINSTANCE,hPrevInst,LPSTR,lpszCmdLine, /,指向程序命令行参数的指针,int,nCmdShow,/,窗口显示方式的整数值标识,),16,用窗口类结构描述窗口:,char,lpszClassName,=,窗口,;,WNDCLASS,wc,; /,定义一个窗口类变量,wc.style,=0;,wc.lpfnWndProc,=,WndProc,;,/,窗口处理函数,wc.cbClsExtra,=0;/,窗口类无扩展,wc.cbWndExtra,=0;/,窗口无扩展,wc.hInstance,=,hInstance,;/,当前实例句柄,wc.hIcon,=,LoadIcon(NULL,IDI_APPLICATION,);,wc.hCursor,=,LoadCursor(NULL,IDC_ARROW,);,wc.hbrBackground,=(HBRUSH),GetStockObject(WHITE_BRUSH,);,wc.lpszMenuName,=NULL; /,窗口无菜单,wc.lpszClassName,=,lpszClassName,;,定义一个窗口类,17,注册窗口类:,RegisterClass(&wc,);,创建窗口:,hwnd,=,CreateWindow(lpszClassName,“Windows”, /title,WS_OVERLAPPEDWINDOW, /window style,120,50, /,cordinates,of the left-up corner,800,600, /width and height,NULL,/parent window handle,NULL,/handle to the main menu,hInstance,/handle to the application instance,NULL);,显示窗口:,ShowWindow(hwnd,nCmdShow,);,UpdateWindow(hwnd,);,创建窗口的三个步骤,18,MSG,Msg,;,While(GetMessage(&Msg,NULL,0,0),TranslateMessage(&Msg,);,DispatchMessage(&Msg,);,进入消息循环,用于过滤的最小消息号,用于消息过滤的最大消息号,19,LRESULT CALLBACK,WndProc(HWND,hwnd,UINT,message,WPARAM,wParam, LPARAM,lParam,),switch(message,),case ,break;,caseWM_DESTROY:,PostQuitMessage(0);,default:,return,DefWindowProce(hwnd,message,wParam,lParam,);,return 0;,20,2. MFC,应用程序框架,应用程序主函数的,C+,类封装,派生类的应用,MFC,消息映射,MFC,的基本应用程序框架类,MFC,应用程序的文档视图结构及其框架类,对象的创建,21,窗口类:,class,CFrameWnd,public:,HWND,hWnd,;,public:,int,RegisterWindow,();,void Create(LPCTSTR,lpClassName,LPCTSTR,lpWindowName,);,void,ShowWindow(int,nCmdShow,);,void,UpdateWindow,();,;,数据成员,创建窗口,定义及注册窗口类,显示与更新窗口,2.1,应用程序主函数的,C+,类封装,22,应用程序类:,class,CWinApp,public:,CFrameWnd,*,m_pMainWnd,;,public:,BOOL,InitInstance,(,int,nCmdShow,);,int,Run();,;,以窗口类的对象作为数据成员,在初始化函数中创建及显示窗口,消息循环,23,2.2,派生类的应用,利用,C+,类的继承性和多态性,程序员可以在已有的类的基础上派生自己的类。这样,程序员就可以在派生类中,添加,自己需要的成员,同时也可以对基类的函数进行,重新定义,(重写),以满足不同应用程序的需要。,24,2.3,MFC,消息映射,消息映射 概念,消息映射是使用,Visual C+,来进行,windows,应用程序设计中的一部分;,通过消息映射,消息和它的处理函数才能对应起来。,ClassWizard,来创建新类、定义消息处理函数、覆盖,MFC,的虚函数,25,struct,AFX_MSGMAP_ENTRY,/ Windows,消息,UINT,nMessage,;,UINT,nCode,;,UINT,nID,;,UINT,nLastID,;,UINT,nSig,;,/,消息函数指针,AFX_PMSG,pfn,;,;,26,27,28,在类声明文件中添加,DECLARE_MESSAGE_MAP,来,声明消息映射表,在类实现时,BEGIN_MESSAGE_MAP,BEGIN_MESSAGE_MAP(,类名称,基类名称,),END_MESSAGE_MAP,来,实现消息映射表,29,消息绑定机制,消息映射宏,函数原型,函数实现,消息在,SDI,各类中的传递过程如下:,视图类,文档类,框架类,应用程序类,消息处理的时机,可以在任何类中,但是一般在视图类中实现,.,30,利用向导,在适当的类中建立相应的消息函数,添加适当的处理语句,学会利用参数,利用,ClassWizard,编制消息处理函数,31,2.4,MFC,应用程序框架,应用程序的框架由两个对象组成:应用程序类,CWinApp,的派生类对象和框架窗口类,CFrameWnd,的派生类对象,后者作为一个成员对象嵌在前者之中,。,32,CObject,类为其派生类提供了支持序列化、调试信息、运行期类型信息等一些通用功能,这个类中封装了窗口函数,封装了窗口的一些,通用功能。,封装了应用程序主窗口的功能,33,MFC,应用程序的核心是基于,CWinApp,类的应用程序对象。一旦包含头文件,Afxwin.h,,就将,CWinApp,和其他的,MFC,类引入应用程序中。,一个应用程序只能有一个应用程序对象,此应用程序对象一般在应用程序类实现文件的开头被声明。,MFC,提供一个,AfxWinMain,函数,,AfxWinMain,()是应用程序的真正入口。,34,2.5,MFC,应用程序的文档,/,视图结构,及其框架类,class,CMyApp:public,CWinApp,class,CMyDoc:public,CDocument,class,CMyView:public,CView,class,CMainFrame,:public,CFrameWnd,CWnd,*,m_pMainWnd,文档模板,CMyDoc,*,CMyView:GetDocument,(),基本应用程序框架与,文档,/,视图结构应用,程序框架的对比,35,2.6,对象的动态创建,程序在运行过程中如果要创建文档、视图、框架窗口等对象,构造这些对象的类就必须支持动态创建。,DECLARE_DYNCREATE(classname,),和,IMPLEMENT_DYNCREATE(classname,baseclassname,),36,struct,CRuntimeClass,LPCSTR,m_lpszClassName,;,CRuntimeClass,*,m_pBaseClass,;,CRuntimeClass,*,m_pNextClass,;,;,37,38,例,1,利用,MFC AppWizard,创建一个,SDI,版的,MFC,可执行程序,程序运行后在窗口中央显示“,Welcome to the Class!”.,程序设计举例,39,上机练习题,1.,利用,ProjWizard,创建,Win32,程序时,VC,可以创建一个空项目,一个简单,Win32,架构程序,或一个典型的,Win32,程序,分别利用这三种方式创建一个,Win 32,应用程序,应用程序的主窗口显示“,Hello, VC”,同时当按下鼠标左键时,计算机发出叮咚声,.,2.,比较三个程序的代码,.,40,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!