MFC Windows应用程序设计——学习笔记【1】

本文介绍了MFC Windows应用程序设计的基础知识,包括Windows API的窗口管理、图形设备和系统服务函数。详细讲解了句柄的概念和常见类型,以及基本数据类型的别名。此外,还阐述了事件与消息的机制,如消息结构、消息循环和消息处理,强调了Windows应用程序的运行是消息驱动的。最后,简单区分了队列消息和非队列消息的传输途径。
摘要由CSDN通过智能技术生成

1. Windows API函数根据功能大体可以分为以下三大类型

  1. 窗口管理函数:实现窗口创建、移动和修改等功能;
  2. 图形设备函数:又称图形设备接口,实现图形的绘制及操作功能;
  3. 系统服务函数:实现与操作系统有关的一些功能。

2. 句柄:在Windows应用程序中除了普通变量之外的诸如窗口、按钮、滚动条等复杂的程序对象和实例的标识。不同Windows对象具有不同的类型,常用句柄类型见下表1。

表1:常用的句柄类型

句柄类型

说明

句柄类型

说明

HWND

窗口句柄

HDC

图形设备环境句柄

HINSTANCE

当前程序应用实例句柄

HBITMAP

位图句柄

HCURSOR

光标句柄

HICON

图标句柄

HFONT

字体句柄

HMENU

菜单句柄

HPEN

画笔句柄

HFILE

文件句柄

HBRUSH

画刷句柄



3. 基本数据类型的别名:为提高程序程序的可读性(凡是Windows自定义数据类型的关键字都要大写)

typedef unsigned long DWORD;

typedef unsigned char BYTE;

typedef unsigned short WORD;

typedef float FLOAT;

typedef unsigned int UINT;

typedef int BOOL;

4. 事件与消息:Windows应用程序靠事件触发产生响应,事件由各种信息描述,称为消息,消息结构定义如下:

typedef struct tagMSG

{

HWND hwnd;             // 产生消息的窗口句柄

UINT    message;       // 消息标识码

WPARAM wParam;   // 消息的附加信息 1

LPARAM  lParam;      // 消息的附加信息 2

DWORD  time;           // 消息进入消息队列的时刻

POINT point;              // 表示发送该消息时光标的位置

}

5. 消息循环:系统为每个应用程序都建立了一个叫做消息队列的存储空间,在程序的运行过程中如果发生了一个事件,Windows就会把这个事件对应的消息送入消息队列等待使用;应用程序可以通过调用Windows提供的API函数GetMessage()从消息队列中获取消息,并利用GetMessage()函数的返回值(当获取消息时,该函数返回TRUE,否则返回FALSE)组织一个循环,从而可以不断从消息队列获取消息,一旦获取了一个消息,就把这个消息发送给系统。

系统会根据消息中的hwnd找到应该接收消息的程序窗口,并根据窗口提供的信息,以消息为参数来调用一个用户编写的叫做“窗口函数”的函数。在窗口函数中以消息中的消息标识message为依据查找并执行该消息所对应的程序段,对消息进行处理。

处理完毕后,只要该消息不是终止应用程序消息,则会立即返回消息循环,以等待获取下一条消息。Windows应用程序就这样周而复始进行循环,直至用户发出结束应用程序的消息。

==》windows应用程序的运行是消息驱动的。

6.消息分类:

从传输途径上看,消息大体可以分为两类:一种是需要进入消息队列的消息,称为队列消息,例如鼠标和键盘消息;另一种是不经消息队列而直接送达窗口的非队列消息,系统消息一般都是非队列消息。


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值