VC++深入详解--第一章 Windows程序内部运行机制

本文详细介绍了Windows程序的内部运行机制,包括API与SDK的区别、窗口与句柄的概念、消息队列的工作原理,以及WinMain函数、窗口创建、消息处理等关键步骤。通过理解这些基础知识,开发者可以更好地掌握Windows系统下的应用程序开发。
摘要由CSDN通过智能技术生成

1.1 API与SDK

    API:application programming interface,应用程序编程接口,如在windows系统编程时,windows系统提供了很多API函数接口供开发者直接使用,在windows.h头文件进行了声明
    MSDN:windows开发说明工具,介绍windows系统API的使用
    SDK:software development kit,软件开发包,包括开发工具、开发文档说明、开发环境、API函数、辅助工具等。

1.2 窗口与句柄

    窗口:屏幕上显示的一块矩形区域,是应用程序与用户进行交互的接口,可以通过窗口进行信息的输入和输出。
    窗口包括客户区和非客户区,客户区主要包括应用程序直接操作和控制的区域,用来显示文字或绘制图形等,非客户区由操作系统来管理,包括标题栏、菜单栏、系统菜单、最小化和最大化框、可调边框等。
    窗口包括子窗口和父窗口,对话框、消息框、按钮、单选框、复选框、组框、编辑框等都是窗口的类型。windows系统启动完成后看到的桌面也是一个窗口,这个窗口由windows系统自动创建和管理。
    句柄:windows系统中有各种各样的资源,系统创建资源后会分配内存并返回相应资源的标识号,即句柄。句柄是在windows系统中识别资源的标识,有图标句柄、光标句柄、画刷句柄、窗口句柄等。

1.3 消息与消息队列

    消息:windows系统中,用户程序可以调用系统API接口,系统也可以通过消息的方式来调用应用程序,基于事件驱动的方式。
    在windows系统中,操作首先由操作系统感知,然后将操作打包成一个消息交由应用程序处理。操作系统调用窗口过程(处理消息的函数)将消息投放到应用程序的消息队列。
    消息队列:windows应用程序开始后,系统会自动创建一个消息队列用来存放该程序创建的窗口的消息,对应用程序操作时,会产生消息推送到应用程序的消息队列中处理。

typedef struct tagMSG{
         	HWND hwnd; //窗口句柄标识
         	UINT message; //消息标识
         	WPARAM wParam; //附加消息1
         	LPARAM lParam; //附加消息2
         	DWORD time; //消息被传递时候的时间
         	POINT pt; //消息被传递时光标在屏幕上的位置
} MSG;

对各个字段的说明:
    1) HWND hwnd:消息所属的窗口,窗口句柄
    2) UINT message:消息标识,即消息类型,也就是以 WM 开头的消息(WM 是 Window Message 的缩写 ),例如 WM_CREATE、WM_PAINT、WM_DESTROY、WM_COMMAND、WM_KEYDOWN、WM_LBUTTONDWON 等。
    3) wParam 和 lParam 是要重点说明的,它们都表示附加消息。例如,当收到一个字符消息的时,message 的值为 WM_CHAR,但用户到底输入的是什么字符,那么就由 wParam 和 lParam 来说明。wParam、lParam 表示的信息随消息类型的不同而不同,具体细节可以到MSDN中查看。
    WPARAM 和 LPARAM 这两种数据类型的定义分别为:
        typedef UINT_PTR WPARAM;
        typedef LONG_PTR LPARAM;
    在现代操作系统中(32位和64位操作系统),它们一般都表示 32 位的整数。但在16位操作系统中,WPARAM 表示16位整数,而 LPARAM 表示32位整数,根据匈牙利命名法,16 位的变量通常以W开头,32 位变量通常以L开头。升级到32位操作系统后,WPARAM也被扩展到32位,此时 WPARAM 和 LPARAM 的大小完全相同。 在 Win32 API 的早期,由于还有很多 Win16 API 的软件,为了保证和 Win16 API 的代码可移植性,微软依然保留了 WPARAM 和 LPARAM 两个宏。

1.4 WinMain函数

    Windows应用程序的入口函数、主函数。WinMain函数结束时,Windows应用程序结束。
int WINAPI WinMain(
	HINSTANCE hInstance, 当前运行实例的句柄
	HINSTANCE hPrevInstance, 前一个运行实例的句柄,win32环境下总是NULL
	LPSTR lpCmdLine, 传递给应用程序的命令行参数
	int nShowCmd 窗口显示状态
	)

1.5 窗口的创建

  • 设计一个窗口类

  • 注册窗口类

  • 创建窗口

  • 显示及更新窗口

    ----窗口类的设计-WNDCLASS结构体

typedef struct _WNDCLASS
 {
   
	 UINT style; // 窗口类型,
	 WNDPROC lpfnWndProc;<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值