第1章 Windows程序设计基础

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Windows 程序设计
第1章
Windows程序设计基础
本章主要内容 介绍Windows平台下程序运行的内部机 制,涉及到一些术语,为进一步学习 MFC程序打下基础。
2013-9-9
2
1.1 API与SDK API: Windows操作系统提供了各种各样 的函数,以方便我们开发Windows应用 程序,这些函数是Windows操作系统提 供给应用程序编程的接口,即 Application Programming Interface,简称 API函数。可在MSDN中查到。 SDK: Software Development Kit,软件开 发包,是开发所需要资源的一个集合。 注:API和SDK已成为广泛使用的术语
2013-9-9 3
1.2 窗口与句柄 窗口:屏幕上的一块矩形区域,是 Windows应用程序与用户进行交互的接 口。利用窗口,可以接收用户的输入, 以及显示输出。 句柄(HANDLE):在Windows程序中, 有各种各样的资源(窗口、图标、光标 等),系统在创建这些资源时会为它们分 配内存,并返回标识这些资源的标识号 (整数)。 HWND HICON HCURSOR HBURSH…
用于将虚拟键消息转换为字符消息。
DispatchMessage函数 分派一个消息到窗口过程,由窗口过 程函数对消息进行处理。
2013-9-9 15
应用程序 (2)GetMessage(…)
(3)DispatchMessage(…)
窗口过程
消息队列
(1) (4) 操作系统 Windows应用程序的消息处理机制2013 Nhomakorabea9-9 12
窗口类的类型
在我们的程序中经常要用到一类变量,这个变量里的每一位(bit) 都对应某一种特性。当该变量的某位为1时,表示有该位对应的 那种特性,当该位为0时,即没有该位所对应的特性。当变量中 的某几位同时为1时,就表示同时具有几种特性的组合。一个变 量中的哪一位代表哪种意义,不容易记忆,所以我们经常根据 特征的英文拼写的大写去定义一些宏,该宏所对应的数值中仅 有与该特征相对应的那一位(bit)为1,其余的bit都为0。我们 使用goto definition就能发现CS_VREDRAW=0x0001, CS_HREDRAW=0x0002,CS_DBLCLKS =0x0008, CS_NOCLOSE=0x0200。他们的共同点就是只有一位为1,其余 位都为0。如果我们希望某一变量的数值既有CS_VREDRAW特 性,又有CS_HREDRAW特性,我们只需使用二进制OR(|)操 作符将他们进行或运算相组合,如style=CS_VREDRAW | CS_HREDRAW | CS_NOCLOSE。如果我们希望在某一变量原有 的几个特征上去掉其中一个特征,用取反(~)之后再进行与 (&)运算,就能够实现,如在刚才的style的基础上去掉 CS_NOCLOSE特征,可以用style & ~CS_NOCLOSE实现。
2013-9-9 10
Step 1 设计一个窗口类 一个完整的窗口具有许多特征,包括光 标、图标、背景色等,完成设计后还要 起一个名字。Windows已经为我们定义 好了一个窗口所应具有的基本属性 (WNDCLASS),我们只需要像做填空一 样将需要填充的部分填写完整,一种窗 口就设计好了。
);
2013-9-9
9
1.4.2 窗口的创建 创建一个完整的窗口需要经过下面四 个操作步骤: 1. 设计一个窗口类WNDCLASS 2. 注册窗口类RegisterClass() 3. 创建窗口CreateWindow() 4. 显示及更新窗口 ShowWindow() UpdateWindow()
2013-9-9 5
操作系统是怎样将感知到的事件传递给应用程序的呢? 这是通过消息机制(Message)来实现的。操作系统将每 个事件都包装成一个称为消息的结构体MSG来传递给 应用程序,参看MSDN。 MSG结构定义如下: typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG;
2013-9-9
11
typedef struct _WNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; } WNDCLASS;
2013-9-9 16
2013-9-9 4
1.3 消息驱动、消息队列、消息响应 Windows是一种消息驱动(事件驱动)的 操作系统。操作系统能够将输入设备的 变化上传给应用程序。如用户在某个程 序活动时按了一下键盘,操作系统马上 能够感知到这一事件,并且能够知道用 户按下的是哪一个键,操作系统并不决 定对这一事件如何作出反应,而是将这 一事件转交给应用程序,由应用程序决 定如何对这一事件作出反应。MSG
2013-9-9
13
• 窗口过程函数
第二个成员变量lpfnWndProc指定了这一类型 窗口的过程函数,也称回调函数。回调函数 的原理是这样的,当应用程序收到给某一窗 口的消息时(还记得前面讲过的消息通常与 窗口相关的吗?),就应该调用某一函数来 处理这条消息。这一调用过程不用应用程序 自己来实施,而由操作系统来完成,但是, 回调函数本身的代码必须由应用程序自己完 成。对于一条消息,操作系统到底调用应用 程序中的哪个函数(回调函数)来处理呢? 操作系统调用的就是接受消息的窗口所属的 类型中的lpfnWndProc成员指定的函数。每一
HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handle to previous instance LPSTR lpCmdLine, // command line int nCmdShow // show state
2013-9-9 7
消息队列:操作系统为每个应用程序建 立的用于盛放消息的先进先出的缓冲区。
应用程序
OS
消息响应:应用程序对消息进行处理的 过程。
2013-9-9
8
1.4 WinMain函数 (Windows程序的入口函数) 1.4.1 WinMain函数定义 int WINAPI WinMain(
2013-9-9 6
从变量的类型区分变量的用途
int x,y; x=30; y=30; //x和y既可以用来表示坐标点,也可以用来表示宽度和 高度,还可以用来表示身高和体重。
typedef int WIDTH typedef int HEIGHT WIDTH x; HEIGHT y; //好处:我们从变量的类型上就可以知道x和y是用来表 示宽度和高度。
种不同类型的窗口都有自己专用的回调函数, 该函数就是通过lpfnWndProc成员指定的。
2013-9-9 14
1.4.3 消息循环 在创建窗口、显示窗口、更新窗口后, 我们需要编写一个消息循环,不断从消 息队列中取出消息,并进行响应。 GetMessage函数取出消息 TranslateMessage函数
相关文档
最新文档