Windows程序设计初步_第1页
Windows程序设计初步_第2页
Windows程序设计初步_第3页
Windows程序设计初步_第4页
Windows程序设计初步_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、Windows程序设计初步,学习目标,了解Windows窗口的基本结构 熟悉WinMain函数的参数意义 了解应用程序实例句柄的意义 熟练运用Windows窗口类结构 了解包括窗口句柄在内的所以句柄的意义 理解消息循环机制 熟练运用窗口回调函数 了解消息队列 熟悉常用的Window消息 熟练运用程序发送消息,学习重点,理解消息循环机制 理解句柄的概念 熟练运用窗口回调函数,学习难点,理解消息循环机制 熟练运用窗口回调函数,图形化的用户界面,过程驱动,程序控制用户下一步该如何做,代码决定程序下一步如何做 程序接下来做什么有一个明确的预测 程序控制着主导着用户下一步做什么,优点: 1、程序设计简单

2、 2、程序员很好地控制程序下一步的行为,缺点: 1、大量浪费CPU资源 2、难以支持多任务并存,事件驱动,用户决定下一步该如何做,代码的执行流程受到用户的控制 程序接下来做什么没有明确的预测 用户自由地决定下一步做什么,优点: 1、程序设计简单 2、节省CPU资源 3、容易实现多任务并存,缺点: 1、程序设计比较难 2、程序员难以把握程序下一步的行为,Windows程序,SDK即software develope kit(软件开发工具包),,#include int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, L

3、PSTR lpCmdLine, int nCmdShow) MessageBox(NULL,This is my first Win32 programme, Hello, world!,MB_OK); return 0; ,简单的Windows程序,新式的主函数,int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow),hInstance: 当前进程句柄 hPrevInstance: 前一个进程句柄(已经淘汰) lpCmdLine: 命令行参数字符串 nC

4、mdShow: 窗口的显示样式,关于Windows句柄,HINSTANCE(应用程序实例句柄): Windows支持同时有很多应用程序活动,管理这些应用程序需要的一个唯一的ID值。 HWND(窗口句柄): Windows可以同时在桌面上显示很多窗口,管理这些窗口需要一个唯一的ID值。,句柄就是一个ID值,句柄实质上是一个指向内存某一个区域的指针,这个内存区域存放着与这个句柄有关的一个数据结构,自创一个窗口,自创一个窗口分三步走:,注册窗口类 创建窗口 显示窗口,窗口显示完全之后,接下来进入消息循环,注册窗口类,让Windows明白将会有一种窗口即将建立,ATOM RegisterClassEx

5、(CONST WNDCLASSEX *lpwcx);,typedef struct _WNDCLASSEX UINT cbSize; / 结构体的大小 UINT style; / 类风格 WNDPROC lpfnWndProc; / 回调函数地址 int cbClsExtra; / 扩展字节 int cbWndExtra; / 扩展字节 HANDLE hInstance; / 进程实例句柄 HICON hIcon; / 窗口大图标 HCURSOR hCursor; / 鼠标光标形状 HBRUSH hbrBackground; / 窗口背景色 LPCTSTR lpszMenuName; / 窗口

6、主菜单 LPCTSTR lpszClassName; / 类名字符串 HICON hIconSm; / 窗口小图标 WNDCLASSEX;,创建一个窗口,hWnd = CreateWindow ( szWindowClass, / 窗口类字符串 szTitle, / 窗口标题 WS_OVERLAPPEDWINDOW, / 窗口外观样式 20, 30, 400, 300, / 窗口位置、大小 NULL, / 父窗口句柄 NULL, / 窗口主菜单句柄 hInstance, / 窗口所在进程实例 NULL / 暂时保留 );,创建成功后返回,可惜它不负责显示窗口,显示窗口,显示窗口 ShowWin

7、dow(hWnd, SW_SHOW);,更新窗口 UpdateWindow(hWnd);,显示哪个窗口,如何显示窗口,更新哪个窗口,消息循环,不断循环监测用户消息,while (GetMessage( ,GetMessage: 循环检测消息队列中是否具有消息 如果没有消息,则等待至有消息为止,返回非0值 TranslateMessage: 将消息转换成合适的形式 只是对键盘消息有一定用途 DispatchMessage: 触发Windows调用回调函数执行程序员代码,消息结构体,取得的消息存放在一个结构体中,typedef struct tagMSG HWND hwnd; / 接收消息的窗口句

8、柄 UINT message; / 消息值 WPARAM wParam; / 消息附加参数,一个32位整型值 LPARAM lParam; / 消息附加参数,一个32位整型值 DWORD time; / 消息到来时的时间 POINT pt; / 消息发生时鼠标光标所在的位置 MSG;,GetMessage函数从消息队列中取出一个消息后,直接填充到消息结构体,消息循环,消息队列,暂时存放消息的一个队列,用户或者系统从这边放入消息,GetMessage从这边取出消息,消息循环,处理消息,回调函数的处理,LRESULT CALLBACK WndProc ( HWND hWnd, / 处理消息的窗口句

9、柄 unsined message, / 被处理的消息ID unsigned wParam, / 附带的消息参数 long lParam / 附带的消息参数 ),typedef long LRESULT,#define CALLBACK _stdcall,处理消息,根据不同的消息,执行不同的代码,形形色色的消息,一个窗口从创建到销毁会经历哪一些消息?,WM_CREATE消息,此时窗口已经创建 此时创建仅仅创建了一些基本要素 (标题栏、边框、主菜单等) 此时窗口还是不可见的,我们不能在这里添加一些依赖于窗口创建的代码,在这里可以作一些基本的初始化工作,WM_CLOSE消息,此时用户刚刚想关闭窗口 此时窗口仍然显示,在这里添加代码,比如让它什么都不做,则窗口是销毁不了的。,在这里可以拦截窗口的销毁,WM_DESTROY消息,此时

温馨提示

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

评论

0/150

提交评论