最新Win32 编程(共158张PPT课件).pptx
《最新Win32 编程(共158张PPT课件).pptx》由会员分享,可在线阅读,更多相关《最新Win32 编程(共158张PPT课件).pptx(158页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C/C+教学(jio xu)课程Win32 编程第一页,共一百五十八页。PointsWindows编程基础编程基础Windows消息和消息机制消息和消息机制Windows绘图和字体绘图和字体Windows文件处理文件处理Windows资源管理资源管理Windows控件控件Windows的进程和线程的进程和线程Windows内存管理内存管理第二页,共一百五十八页。Windows编程基础(jch) Windows应用程序的类型 控制台程序 Console DOS程序,本身没有(mi yu)窗口,通过Windows DOS窗口执行 窗口程序 拥有自己的窗口,可以与用户交互 库程序存放代码、数据的程序
2、,执行文件可以从中取出代码执行和获取数据 静态库程序 扩展名LIB,在执行文件执行时从中获取代码动态库程序 扩展名DLL,在编译链接程序时,将函数地址放入到执行文件中第三页,共一百五十八页。Windows编程基础(jch)三种应用程序的对比 入口函数控制台程序 - main窗口程序 - WinMain动态库程序 - DllMain静态库程序 - 无入口函数(根本无法执行) 文件存在方式(fngsh) 控制台程序、窗口程序 - EXE文件动态库程序 - DLL文件静态库程序 - LIB文件执行方式控制台程序 - 在DOS窗口内执行。窗口程序 - 拥有自己的窗口在自己的窗口内执行.动态库程序 -
3、本身无法执行,由可执行程序或其他的DLL调用静态库程序 - 执行不存在,代码会嵌入到可执行文件或DLL等中。第四页,共一百五十八页。Windows开发(kif)环境 Windows开发工具和库 开发工具 Visual Studio C+ VC1.5 - VC6.0 VC2005-VC2010( 10.0 ) VC的编译工具 编译器CL.EXE 将.cpp/.C源代码编译成目标代码.obj 链接器LINK.EXE 将目标代码、库链接生成(shn chn)最终文件 资源编译器RC.EXE (.rc)将资源编译,最终通过链接器存入最终文件第五页,共一百五十八页。Windows开发(kif)环境 Wi
4、ndows库和头文件 Windows库 kernel32.dll - 提供了核心的API,例如进程、线程、内存管理(gunl)等。 user32.dll - 提供了窗口、消息等API gdi32.dll - 绘图相关的API头文件 windows.h - 所有windows头文件的集合 windef.h - windows数据类型 winbase.h - kernel32的API wingdi.h - gdi32的API winuser.h - user32的API winnt.h - UNICODE字符集支持第六页,共一百五十八页。HelloWorld程序(chngx)的相关函数int WI
5、NAPI WinMain( HINSTANCE hInstance,/当前程序的实例句柄HINSTANCE hPrevInstance, /当前程序前一个实例句柄LPSTR lpCmdLine,/命令行参数字符串int nCmdShow /窗口的显示方式);hPrevInstance - Win32下,一般为NULLint MessageBox(HWND hWnd,/父窗口句柄LPCTSTR lpText, /显示(xinsh)在提示框中的文字LPCTSTR lpCaption, /显示在标题栏中的文字UINT uType /提示框中的按钮、图标显示类型);/ 返回点击的按钮ID第七页,共一百
6、五十八页。编译(biny)、链接和执行编译环境准备 VC98BINVCVARS32.BAT编译程序(bin y chn x) - CL CL.EXE -? 显示CL的帮助 /c 只编译不链接 /Tc 编译C文件 /Tp 编译C+文件链接程序 - LINK LINK.EXE xxx.obj xxx.lib 执行第八页,共一百五十八页。编写第一个窗口(chungku)程序(HelloWorld版) 编写窗口程序的步骤(bzhu): 1 定义WinMain函数2 定义窗口处理函数 (自己定义,处理消息)3 注册窗口类(向XP里边写入数据)4 创建窗口 (在内存中创建窗口)5 显示窗口(根据内存数据,
7、在显示器中绘制出来)6 消息循环( 提取/翻译/派发消息) 7 消息处理第九页,共一百五十八页。资源(zyun)的使用 编写资源的文件 .rc资源脚本文件 编译(biny)rc文件 RC.EXE 将资源链接到程序中 LINK.EXE第十页,共一百五十八页。NMAKE 和 Makefile NMAKEMakefile的一个解释执行的工具,根据 Makefile文件中的定义,编译和链接程序,最终生成文件. Makefile(.mak) 定义编译和链接等操作的脚本文件(把项目(xingm)的处理命令写入),一般对整个项目(xingm)进行处理。 第十一页,共一百五十八页。Makefile的语法(yf
8、)HELLO:依赖行 cl.exe hellownd.c /c/命令行 rc.exe hellownd.rc/命令行 link.exe hellownd.obj hellownd.res user32.lib /命令行Makefile文件中可以有多个依赖行。执行方式NMAKE首先找到第一个依赖行检查(jinch)依赖行的依赖项,如果发现依赖项,首先执行依赖项命令行执行完所有依赖项命令后,再执行自己的命令行。第十二页,共一百五十八页。DBCS和UNICODE编码(bin m)的区别 DBCS字符编码: A 我 是 程 序 员 01 0203 0405 0607 0809 0A0B 但是(dnsh
9、)解析时,可能为: 01 02030405060708090A0B 0102 030405060708090A0B UNICODE编码: A 我 是 程 序 员0001 0203 0405 0607 0809 0A0B 不存在解析的问题第十三页,共一百五十八页。字符集的应用(yngyng) 宽字节字符wchar_t 每个字符占2个字节char 每个字符占1个字节或2个字节 wchar_t 实际是 unsigned short 类型,定义时,需要增加“L”,通知编译器按照双字节编译字符串,采用UNICODE编码。 需要使用(shyng)支持 wchar_t 函数操作宽字节字符串。例如: wcha
10、r_t * pwszText = LHello wchar; wprintf( L%sn, pwszText );第十四页,共一百五十八页。字符集的应用(yngyng) TCHAR#ifdef UNICODE typedef wchar_t TCHAR; #define _TEXT(quote) L#quote #else typedef char TCHAR; #define _TEXT(quote) quote #endifUNICODE字符(z f)打印 wprintf对UNICODE字符打印支持不完善。 在Windows下使用WriteConsole API打印UNICODE字符第十五
11、页,共一百五十八页。窗口(chungku)程序的创建窗口(chungku)程序的创建步骤:1 定义WinMain入口函数2 定义窗口处理函数 WindowProc(处理消息)3 注册窗口类 RegisterClass(往XP系统写数据)4 创建窗口 CreateWindow(在内存中将窗口创建出来)5 显示窗口(将窗口绘制在显示器上) ShowWindow/UpdateWindow6 消息循环 GetMessage TranslateMessage DisptachMessage7 消息处理第十六页,共一百五十八页。窗口(chungku)的注册窗口类 窗口类包含了窗口的各种参数信息的数据结构。
12、每个窗口都具有窗口类,基于窗口类创建窗口。每个窗口类都具有一个名称,使用前必须注册到系统。窗口类的分类 系统窗口类 系统已经(y jing)定义好的窗口类,所有应用程序都可以直接使用。 应用程序全局窗口类 由用户自己定义,当前应用程序所有模块都可以使用。 应用程序局部窗口类 由用户自己定义,当前应用程序中本模块可以使用第十七页,共一百五十八页。系统(xtng)窗口类的注册 不需要注册,直接(zhji)使用窗口类即可。系统已经定义好相应名称,例如: 按钮 - BUTTON 编辑框 - EDIT第十八页,共一百五十八页。应用程序全局(qunj)窗口类的注册RegisterClass/Registe
13、rClassExATOM RegisterClass(CONST WNDCLASS *lpWndClass /窗口类的数据); 注册成功后,返回一个数字(shz)标识。ATOM RegisterClassEx(CONST WNDCLASSEX *lpwcx /窗口类的数据);第十九页,共一百五十八页。应用程序全局(qunj)窗口类的注册typedef struct _WNDCLASSEX UINT cbSize; /结构体的大小 sizeof UINT style; /窗口类的风格 WNDPROC lpfnWndProc; /窗口处理函数 int cbClsExtra; /窗口类的附加数据bu
14、ff的大小 int cbWndExtra; /窗口的附加数据buff的大小 HINSTANCE hInstance; /当前模块的实例句柄 HICON hIcon; /窗口图标句柄 HCURSOR hCursor; /鼠标的句柄 HBRUSH hbrBackground; /绘制窗口背景的画刷句柄 LPCTSTR lpszMenuName; /窗口菜单的资源(zyun)ID字符串 LPCTSTR lpszClassName; /窗口类的名称 HICON hIconSm; /窗口的小图标句柄 WNDCLASSEX, *PWNDCLASSEX;第二十页,共一百五十八页。应用程序全局(qunj)窗口
15、类的注册 应用程序全局(qunj)窗口类的注册,需要在窗口类的风格中增加 CS_GLOBALCLASS,例如: WNDCLASSEX wce = 0; wce.style = .|CS_GLOBALCLASS; 应用程序局部窗口类 在注册窗口类时,不添加CS_GLOBALCLASS风格。第二十一页,共一百五十八页。窗口(chungku)类的风格CS_GLOBALCLASS - 应用程序全局窗口类CS_BYTEALIGNCLIENT - 窗口客户区的水平位置8倍数对齐CS_BYTEALIGNWINDOW - 窗口的水平位置8倍数对齐CS_HREDRAW - 当窗口水平变化时,窗口重新绘制CS_V
16、REDRAW - 当窗口垂直变化时,窗口重新绘制 CS_CLASSDC - 该类型的窗口,都是有同一个绘图(DC)设备 CS_PARENTDC - 该类型的窗口,使用它的父窗口的绘图(DC)设备CS_OWNDC - 该类型的窗口,每个窗口都使用自己的绘图(DC)设备CS_SAVEBITS - 允许窗口保存成图(位图),提高窗口的绘图效率,但是(dnsh)耗费内存资源CS_DBLCLKS - 允许窗口接收鼠标双击CS_NOCLOSE - 窗口没有关闭按钮第二十二页,共一百五十八页。窗口类的查找(ch zho)过程1 系统根据传入的窗口类名称,在应用程序局部窗口类中查找,如果找到执行(zhxng)
17、2,如果未找到执行3。2比较局部窗口类与创建窗口时传入的HINSTANCE变量。如果发现相等,创建和注册的窗口类在同一模块,创建窗口返回。如果不相等,继续执行3。3 在应用程序全局窗口类,如果找到,执行4,如果未找到执行5。4 使用找到的窗口类的信息,创建窗口返回。5 在系统窗口类中查找,如果找到创建窗口返回,否则创建窗口失败。第二十三页,共一百五十八页。相关(xinggun)API RegisterClass/RegisterClassEx 注册(zhc) GetClassInfo 获取信息 UnregisterClass 卸载第二十四页,共一百五十八页。窗口(chungku)的创建Crea
18、teWindow/CreateWindowExHWND CreateWindowEx(DWORD dwExStyle, /窗口的扩展风格LPCTSTR lpClassName, /已经注册的窗口类名称LPCTSTR lpWindowName, /窗口标题栏的名字DWORD dwStyle, /窗口的基本风格int x, /窗口左上角水平坐标位置int y, /窗口左上角垂直坐标位置int nWidth, /窗口的宽度int nHeight,/窗口的高度HWND hWndParent,/窗口的父窗口句柄HMENU hMenu,/窗口菜单句柄HINSTANCE hInstance, /应用程序实例
19、句柄LPVOID lpParam /窗口创建时附加参数(cnsh) ); 创建成功返回窗口句柄第二十五页,共一百五十八页。子窗口(chungku)的创建 创建(chungjin)时要设置父窗口句柄 创建风格要增加 WS_CHILD|WS_VISIBLE第二十六页,共一百五十八页。窗口(chungku)类和窗口(chungku)的附加数据 作用 注册窗口时,可以设置这两个数据(shj)内存空间 的大小。 int cbClsExtra; /窗口类的附加数据BUFF大小 int cbWndExtra; /窗口的附加数据BUFF大小 可以提供窗口类和窗口存放自己的数据的空间。第二十七页,共一百五十八页
20、。Windows消息(xio xi)机制 程序执行机制 过程驱动 - 程序的执行(zhxng)过程是按照预定好的顺序执行(zhxng)。 事件驱动 - 程序的执行是无序,用户可以根据需要随机触发相应的事件。 Win32窗口程序就是采用 事件驱动 方式执行,也就是 消息机制。第二十八页,共一百五十八页。什么(shn me)是消息? 当系统通知窗口工作时,就采用消息的方式派发给窗口。 消息组成(windows平台下)窗口句柄消息ID消息的两个参数(附带信息(xnx))消息产生的时间消息产生时的鼠标位置第二十九页,共一百五十八页。窗口(chungku)处理函数和消息 每个窗口都必须具有窗口处理函数。
21、LRESULT CALLBACK WindowProc( HWND hwnd, /窗口句柄 UINT uMsg, /消息ID WPARAM wParam, /消息参数 LPARAM lParam /消息参数); 当系统通知(tngzh)窗口时,会调用窗口处理函数同时,将消息ID和消息参数传递给窗口处理函数。 在窗口处理函数中,不处理的消息,使用缺省窗口处理函数,例如DefWindowProc。第三十页,共一百五十八页。消息(xio xi)相关函数1 GetMessage - 获取本进程的消息。BOOL GetMessage(LPMSG lpMsg, /存放获取到的消息BUFFHWND hWnd
22、, /窗口(chungku)句柄 UINT wMsgFilterMin,/获取消息的最小ID 0 UINT wMsgFilterMax /获取消息的最大ID 0);lpMsg - 当获取到消息后,将消息的参数存放到MSG结构中。hWnd - 获取到hWnd所指定窗口的消息。wMsgFilterMin和wMsgFilterMax -只能获取到由它们指定的消息范围内的消息,如果都为0,表示没有范围。第三十一页,共一百五十八页。消息(xio xi)相关函数2 TranslateMessage - 翻译消息。将按键消息,翻译成字符消息。 BOOL TranslateMessage( CONST MSG
23、 *lpMsg /要翻译的消息地址(dzh) ); 检查消息是否是按键的消息,如果不是按键消息,不做任何处理,继续执行。3 DispatchMessage - 派发消息。将消息派发到该消息所属窗口的窗口处理函数上。 LRESULT DispatchMessage( CONST MSG *lpmsg /要派发的消息);第三十二页,共一百五十八页。Windows常用(chn yn)消息WM_DESTROY - 窗口被销毁时的消息,无消息参数。常用于在窗口被销毁之前,做相应的善后处理,例如资源、内存等。WM_SYSCOMMAND - 系统命令消息,当点击(din j)窗口的最大化、最小化、关闭等命令
24、时,收到这个消息。常用在窗口关闭时,提示用户处理。 wParam 具体点击位置,例如关闭SC_CLOSE等.lParam - 鼠标位置 LOWORD 低字 - 水平位置HIWORD 高字 - 垂直位置第三十三页,共一百五十八页。Windows常用(chn yn)消息WM_CREATE - 在窗口创建成功还未显示之前,收到这个消息。常用于初始化窗口的参数、资源等等,包括创建子窗口等。WPARAM - 不使用LPARAM - 是CREATESTRUCT结构的指针,保存了CreatWindowEx中的12个参数。WM_SIZE - 在窗口的大小发生变化后,会收到WM_SIZE。常用于窗口大小变化后,
25、调整窗口内各个部分(b fen)的布局。WPARAM - 窗口大小变化的原因。LPARAM - 变化窗口客户区的大小LOWORD - 变化后的宽度HIWORD- 变化后的高度第三十四页,共一百五十八页。Windows常用(chn yn)消息WM_QUIT - 用于结束消息循环处理。wParam - PostQuitMessage 函数(hnsh)传递的参数。lParam - 不使用当GetMessage收到这个消息后,会返回FALSE,结束while处理,退出消息循环。WM_PAINT - 绘图消息键盘消息鼠标消息定时器消息第三十五页,共一百五十八页。消息(xio xi)的获取 GetMess
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新Win32 编程共158张PPT课件 最新 Win32 编程 158 PPT 课件
限制150内