Visual C教学课件:第1章 Windows编程基础_第1页
Visual C教学课件:第1章 Windows编程基础_第2页
Visual C教学课件:第1章 Windows编程基础_第3页
Visual C教学课件:第1章 Windows编程基础_第4页
Visual C教学课件:第1章 Windows编程基础_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、教学重点1、Windows程序设计基本概念 窗口、事件驱动、句柄、消息、匈牙利命名法2、Windows应用程序源程序结构 WinMain函数(入口函数) -初始化、消息循环 WinProc函数(窗口函数) -处理消息,实现程序具体功能第1章 Windows编程基础 1.1 Windows程序设计Windows的程序设计语言 VC,VB,VJ都是“面向对象”的程序设计语言。对象 Windows的规范部件,如窗口、菜单、按钮、对话框、程序模块等。 第1章 Windows编程基础 1.1 Windows程序设计对象特征 具有规范形态和操作模式,编写Windows程序相当一部分工作是在创建对象和为对象

2、属性赋值。编程方法 传统编写法-API 交互式方法-MFC 第1章 Windows编程基础 1.1 Windows程序设计Windows API 系统函数数据结构 Windows API是Windows系统与Windows应用程序间的标准程序接口,Windows应用程序可以利用大量的标准API函数调用系统功能。 第1章 Windows编程基础 1.2 Windows编程基本概念 (1) 窗口 (2) 句柄 (3) 事件驱动 (4) 消息 (5) 匈牙利命名法第1章 Windows编程基础 窗口一般包含下列组成部分:标题栏、菜单框、工作区、窗口边界、 最大化按钮、最小化按钮、垂直滚动条、水平滚动

3、条。第1章 Windows编程基础 1.2 Windows编程基本概念-窗口1.2 Windows编程基本概念窗口是系统管理应用程序的基本单位,是应用程序与用户之间交互的接口环境,是Windows应用程序基本的操作单元。编写一个Windows应用程序首先应创建窗口,随后应用程序的运行过程即是窗口与系统之间进行数据处理与数据交换的过程。第1章 Windows编程基础 1.2 Windows编程基本概念-事件驱动DOS程序:顺序的、过程驱动程序都有一个明显的开始、明显的过程以及一个明显的结束。Windows程序:事件驱动程序的流程不是由事件的顺序来控制,而是由事件的发生来控制,所有的事件是无序的。

4、第1章 Windows编程基础 1.2 Windows编程基本概念-句柄句柄是一个4字节长的数值,用于标识应用程序中不同的对象和同类对象中不同的实例。应用程序通过句柄访问相应的对象信息。第1章 Windows编程基础 1.2 Windows编程基本概念-句柄第1章 Windows编程基础 HWND窗口句柄HDC设备环境句柄HBITMAP位图句柄HCURSOR光标句柄HICON图标句柄HFONT字体句柄HMENU菜单句柄HPEN画笔句柄HFILE文件句柄HBRUSH画刷句柄HINSTANCE实例句柄1.2 Windows编程基本概念-消息消息是描述事件发生的信息(如按下鼠标或键盘),Window

5、s程序设计是针对事件或消息的处理进行。第1章 Windows编程基础 1.2 Windows编程基本概念-消息Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换。消息组成消息号:由事先定义好的消息名标识;字参数(wParam) :提供消息的附加信息;长字参数(lParam) :提供消息的附加信息。第1章 Windows编程基础 1.2 Windows编程基本概念-消息Windows消息的类型前缀符号用于消息宏识别消息附属的分类 第1章 Windows编程基础 BM按钮控件消息DM按钮控件消息CB组合框控件消息EM编辑控件消息LB列表框控件消息SBM滚动条

6、控件消息WM窗口消息1.2 Windows编程基本概念-匈牙利命名法小写字母做为变量名前缀说明类型,其余部分描述变量意义与功能第1章 Windows编程基础 前缀类型说明chchar字符bBOOL布尔值n(l)int整数1.2 Windows编程基本概念-匈牙利命名法第1章 Windows编程基础 前缀类型说明wWORD16位无符号整数dwDWORD32位无符号数lpszLPTSTR指向字符串的32位指针hHandle窗口对象的句柄1.3 Windows的消息循环1、Windows系统为应用程序保持一个消息队列。2、当有事件发生后,Windows先将激发事件翻译成一个Windows消息,然后再

7、把这个消息加入到这个应用程序的消息队列中去。3、应用程序需要通过消息循环来接收这些消息。 第1章 Windows编程基础 1.3 Windows的消息循环MSG msg; / 定义消息名while (GetMessage (&msg, NULL, 0, 0)TranslateMessage (&msg) ; / 翻译消息DispatchMessage (&msg) ; / 分发消息第1章 Windows编程基础 1.3 Windows的消息循环-MSG结构体typedef struct tagMSGHWND hwnd; UINT message;WPARAM wParam; LPARAM lP

8、aram;DWORD time; POINT pt; MSG, *PMSG;第1章 Windows编程基础 1.3 Windows的消息循环-POINT结构体定义typedef struct tagPOINT LONG x; LONG y; POINT;第1章 Windows编程基础 1.3 Windows的消息循环-MSG结构体hwnd:消息将要发送到的那个窗口的句柄,用这个参数可以决定让哪个窗口接收消息。message:消息号,它唯一标识了一种消息类型。每种消息类型都在windows.h文件进行了预定义。wParam:一个32位的消息参数,这个值的确切意义取决于消息本身。lParam:同上

9、。 第1章 Windows编程基础 1.3 Windows的消息循环-MSG结构体time:消息放入消息队列中的时间,在这个域中写入的并非当时日期,而是从Windows启动后所测量的时间值。Windows用这个域来使消息保持正确的顺序。pt:消息放入消息队列时的鼠标坐标。第1章 Windows编程基础 1.3 Windows的消息循环-GetMessageBOOL GetMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax );第1章 Windows编程基础 1.3 Windows的消息循环-GetMes

10、sagelpMsg:指定要接收消息的MSG结构的地址;hWnd:窗口句柄,一般将其设置为空,表示要获取该应用程序创建的所有窗口的消息;第三、四参数用于指定消息范围。GetMessage收到一个WM_QUIT消息,则返回FALSE以退出消息循环,终止程序运行。否则GetMessage()返回TRUE。第1章 Windows编程基础 1.3 Windows的消息循环- TranslateMessageGetMessage()读入消息后,首先要经过函数TranslateMessage()对其进行解释,但对大多数消息来说并不起什么作用。TranslateMessage()负责将消息的虚拟键转换为字符消

11、息。第1章 Windows编程基础 1.3 Windows的消息循环- DispatchMessageDispatchMessage()函数,把GetMessage获取的Windows消息传送给在MSG结构中为窗口所指定的窗口过程。在消息处理函数处理完消息之后,代码又循环到开始去接收另一个消息,这样就完成了一个完整的消息循环。第1章 Windows编程基础 1.4常用消息鼠标消息WM_LBUTTONDOWN:单击鼠标左键时产生;WM_LBUTTONUP:放开鼠标左键时产生; WM_RBUTTONDOWN:单击鼠标右键时产生;WM_RBUTTONUP:放开鼠标右键时产生; WM_LBUTTOND

12、BLCLK:双击鼠标左键时产生;WM_RBUTTONDBLCLK:双击鼠标右键时产生。第1章 Windows编程基础 1.4常用消息鼠标消息1Param:低字节包含当前光标的X坐标值,高字节包含当前光标的Y坐标值。wParam:包含一整数值以标识鼠标键的按下状态。MK_LBUTTON按下鼠标左键MK_MBUTTON按下鼠标中键MK_RBUTTON按下鼠标右键第1章 Windows编程基础 1.4常用消息键盘消息WM_KEYDOWN:按下一个非系统键时产生的消息。系统键是指实现系统操作的组合键,例如Alt与某个功能键组合以实现系统菜单操作等。wParam:按下键的虚拟键码,用以标识按下或释放的键

13、。1Param:记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。如F1的虚拟键码在Windows.h文件中定义为VK_F1,相似的消息还有WM_KEYUP, 在放开非系统键时产生。第1章 Windows编程基础 1.4常用消息键盘消息WM_ CHAR 按下一个非系统键时产生的消息。wParam 为按键的ASCII码。1Param 与WM_KEYDOWN的相同。第1章 Windows编程基础 1.4 常用消息刷新消息WM_PAINT用户区移动或显示、用户窗口改变大小、程序通过滚动条滚动窗口、下拉式菜单关闭并需要恢复被覆盖的部分、Windows清除对话框等对象并需要恢复被覆盖的部分,均

14、产生WM_PAINT消息。第1章 Windows编程基础 1.4常用消息其他消息WM_CREATE由CreateWindow函数发出的消息。wParam:未用。1Param:包含一个指向CREATESTRUCT数据结构的指针。WM_CLOSE:关闭窗口时产生的消息。wParam和1Param均未用。第1章 Windows编程基础 1.4常用消息其他消息WM_DESTROY 由DestroyWindow函数发出的消息。wParam和1Param均未用。WM_QUIT 由PostQuitMessage函数发出的消息,退出应用程序时发出的消息。wParam:含退出代码,标识程序退出运行时的有关信息。

15、 1Param:未用。第1章 Windows编程基础 1.5 Windows应用程序组成一个基本的Windows应用程序通常由三种类型的文件组成:(1) C/C+语言源程序文件;(2) 头文件;(3) 资源描述文件。第1章 Windows编程基础 1.5 Windows应用程序组成源程序组成结构WinMainWinProcWinMain:入口函数WndProc:窗口函数第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数WinMain函数功能:(1)注册窗口类;(2)建立窗口及执行必要的初始化;(3)进入消息循环,根据接收的消息调用相应的处理过程,当消息循环检

16、索到WM_QUIT时终止程序运行。第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数WinMain函数说明int WINAPI WinMain ( HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow);第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数初始化-窗口类定义定义窗口的形式与功能,通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种属性。第1章 Windows编程基础 1.5 Windows应用程

17、序组成-WinMain函数typedef struct tagWNDCLASS UINT style;/ 窗口类的样式,一般设置为0 WINPROC lpfnWndProc;/窗口函数函数的指针 int cbClsExtra;/分配在窗口类结构体后的字节数 int cbWndExtra;/ 分配在窗口实例后的字节数 HINSTANCE hInstance; / 应用程序的实例句柄 HICON hIcon; / 窗口类的图标第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数 。 HCURSOR hCursor ; / 窗口类的光标 HBRUSH hbrBack

18、ground; / 窗口类的背景刷 LPCTSTR lpszMenuName; / 窗口类菜单资源名 LPCTSTR lpszClassName; / 窗口类名 WNDCLASS;第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数LoadIcon的作用是在应用程序中加载一个窗口图标。其原型为:HICON LoadIcon( HINSTANCE hInstance, / 应用程序句柄 LPCTSTR lpIconName / 图标资源名);第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数 LPCTSTR lpIconNam

19、e IDI_APPLICATION、IDI_ASTERISK 、IDI_ERROR、IDI_EXCLAMATION、IDI_HAND、IDI_INFORMATION、IDI_QUESTION、IDI_WARNING、IDI_WINLOGO 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数程序举例:HICON hIcon;hIcon = LoadIcon(NULL, IDI_QUESTION); 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数LoadCursor的作用是在应用程序中加载一个窗口光标。其原型为:HCURS

20、OR LoadCursor( HINSTANCE hInstance, / 应用程序实例句柄 LPCTSTR lpCursorName / 光标资源名); 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数LPCTSTR lpCursorNameIDC_ARROW、IDC_CROSS、IDC_SIZEALL、IDC_SIZENESW、IDC_SIZENS、IDC_SIZENWSE、IDC_SIZEWE、IDC_UPARROW、IDC_WAIT 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数程序举例:HCURSOR hC

21、ursor;hCursor = LoadCursor(NULL,IDC_WAIT); 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数应用程序调用函数GetStockObject获取系统提供的背景刷。其原型为:HGDIOBJ GetStockObject( int fnObject / 库存对象类型); 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数HGDIOBJ GetStockObject(int fnObject); BLACK_BRUSH、DKGRAY_BRUSH、GRAY_BRUSH、HOLLOW_BRUS

22、H、LTGRAY_BRUSH、NULL_BRUSH、WHITE_BRUSH第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数程序举例:HBRUSH hBrush;hBrush =(HBRUSH) GetStockObject( DKGRAY_BRUSH); 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数初始化-注册窗口类Winows系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterClass()实现。 第1章 Windows编程基础 1.5 Window

23、s应用程序组成-WinMain函数RegisterClass函数返回布尔值,注册成功则返回真。ATOM RegisterClass(CONST WNDCLASS *lpWndClass);程序举例:WNDCLASS ws;/ 初始化代码RegisterClass(&ws); / ws为窗口类结构第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数初始化-创建窗口实例创建一个窗口类的实例由函数CreateWindow()实现,函数原型如下:HWND CreateWindow ( LPCTSTR lpszClassName, 窗口类名 LPCTSTR lpszTi

24、tle, 窗口标题名 DWORD dwStyle, 创建窗口的样式 int x, int y, 窗口左上角坐标 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数 。 int nWidth,int nHeight, 窗口宽度和高度 HWND hwndParent,该窗口的父窗口句柄 HMENU hMenu, 窗口主菜单句柄 HINSTANCE hInstance, 应用程序实例句柄 LPVOID lpParam 指向一个参数值的指针); 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数DWORD dwStyle; 创建窗

25、口的样式WS_BORDER、WS_CAPTION、WS_VSCROLL、WS_MAXIMIZEBOX 、WS_MAXIMIZE、WS_MINIMIZEBOX、WS_MINIMIZE、 WS_OVERLAPPEDWINDOW、WS_POPUP、WS_POPUPWINDOW、WS_SYSMENU、 WS_HSCROLL 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数显示窗口窗口类的显示由ShowWindow()和UpdateWindow()函数实现。应用程序调用ShowWindow函数在屏幕上显示窗口,显示窗口后,应用程序调用UpdateWindow更新并绘

26、制用户区,并发出WM_PAINT消息。 第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数BOOL ShowWindow( HWND hWnd, / 窗口句柄 int nCmdShow / 窗口显示状态);BOOL UpdateWindow( HWND hWnd / 窗口句柄);第1章 Windows编程基础 1.5 Windows应用程序组成-WinMain函数int nCmdShowSW_HIDE、SW_SHOWNORMAL、SW_SHOWMINIMIZE、SW_SHOWMAXMIZE、SW_SHOWNOACTIVE、SW_RESTORE第1章 Windows编程基础 1.5 Windows应用程序组成-消息循环MSG Msg;while (GetMessage (&Msg,NULL,0,0) TranslateMessage(&Msg);/ 处理字符消息 DispatchMessage(&Msg); / 分发消息第1章 Windows编程基础 1.5 Windows应用程序组成-窗口函数WndProc定义了应用程序对接收到的不同消息的响应,包含了对各种可能接收到的消息的处理过程。WndProc函数由一个或多个switch语句组成,每一条case语句对应一种消息,当应用程序接收到一个消息时

温馨提示

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

评论

0/150

提交评论