2024年6月3日发(作者:)

用 API 函数编写最简单的窗口程序

VC++ 6.0 提供的各种工具和编程向导使得程序开发更加快捷。不过“有利必有

弊”,这

些开发工具在带来方便的同时,掩盖了 C++语言的许多基本概念,更让初学者对

MFC

(Microsoft Foundation Classes)的运行机制无法理解。本实例将尽量抛开这

些编程工具,让

读者更深入的理解一些基本概念。

API 的全称是应用程序编程接口(Application Programming Interface)。利

用 Windows 的

API 函数可以实现简单的窗口程序,该窗口只能实现“关闭”操作,运行结果如

图 5.33 所示。

图 5.33 最简单的窗口程序运行界面

1. Windows 中几个常用的结构体变量和 API 函数

Windows 中常用的结构体变量都放在 windows.h 头文件中。

消息结构体 MSG:

typedef struct tagMSG

{ HWND hwnd; //用以检索消息的窗口句柄

UINT message;//消息标号,如实例 23 中自定义消息 WM_THREADEND 消息标号

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG;

窗口结构体 WNDCLASS:

ypedef struct _WNDCLASS

{UINT style; //窗口的样式,一般设为 0

WNDPROC lpfnWndProc; //指定窗口函数

int cbClsExtra;

int cbWndExtra;

HANDLE hInstance; //应用程序实例句柄

HICON hIcon; //使用的图标

HCURSOR hCursor; //使用的光标

HBRUSH hbrBackground; //背景画刷

LPCTSTR lpszMenuName; //窗口菜单名

LPCTSTR lpszClassName; //窗口类名

} WNDCLASS ;

创建新窗口函数 CreateWindow:

HWND CreateWindow(

LPCTSTR lpClassName, // 注册类名

LPCTSTR lpWindowName, // 窗口名

DWORD dwStyle, // 窗口样式

int x, // 窗口原点 x 水平坐标

int y, // 窗口原点 y 垂直坐标

int nWidth, // 窗宽

int nHeight, // 窗高

HWND hWndParent, // 父窗口句柄

HMENU hMenu, // 菜单句柄

HINSTANCE hInstance, // 当前应用程序句柄

LPVOID lpParam // 窗口创建数据

);

2. WinMain 函数和窗口函数

与控制台程序类似,所有的 Windows 程序的入口点都从 WinMain 函数开始。

WinMain

函数主要包括函数定义、初始化和消息循环三个部分。

WinMain 函数的定义部分如下:

int WINAPI WinMain(HINSTANCE hInstance,

HINSTANCE hPrevInst,

LPSTR lpszCmdLine,

int nCmdShow)

初始化则包括窗口类 WNDCLASS 的定义、注册,创建窗口类对象和显示窗口。

消息循环是Windows应用程序的核心。Windows将各种消息放入应用程序的消息

队列中,

新手学 Visual C++ 30 例

而应用程序的 WinMain 函数从消息循环提取队列中的消息,并将其传递给窗口。

获取消息并

将消息放入队列是 Windows 操作系统完成的,不需要编程实现。而提取消息并

传递给窗口则

需要程序员自己完成。在 MFC 中,后面这一步一般通过类向导(ClassWizard)

来实现,在

有特殊需要时也可以按照实例 23 中的方法添加自定义的消息映射。

窗口函数定义应用程序接受到不同消息的响应。窗口函数通过 CreateWindow 的

第一个

参数与创建的窗口建立联系。窗口函数的一般形式如下:

LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParaw,LPARAM

lParam)

3. 创建一个基于 Windows 的工程 ex24

(01)打开菜单“File→New”,在弹出的新建(New)对话框左边的工程(Project)

选项卡

中选择“Win32 Application”,在右边的工程名(Project Name)处输入

“ex24”,如图

5.34 所示。单击确认(OK)按钮。

图 5.34 新建一个基于 Windows 的应用程序

(02)在弹出的 MFC 应用程序向导(MFCAppWizard)对话框中选择“An empty

project”,

如图 5.35 所示。单击结束(Finish)按钮。

(03)在弹出对话框中显示所有配置信息,如图 5.36 所示。单击确认(OK)按