首页
社区
课程
招聘
[原创]C++ Window API 学习笔记 - 基础概念
发表于: 2021-5-26 14:22 7699

[原创]C++ Window API 学习笔记 - 基础概念

2021-5-26 14:22
7699

    Windows API 是Windows操作系统提供给应用程序的大量函数,开发程序调用这些接口,可以像搭建“积木”一样,可以搭建各种各样不同的程序。所以Windows API函数就是构建整个Windows 系统的基石。

    接下来,关于API的基本结构如下图:


    

    Windows API的数据类型是不同于C或者C++的数据类型的 ,它有一套属于自己的数据类型。同时,这两者之前又有一些关系。比如,部分数据类型是由标准C当中重定义而来,而有些是Windows 特有的。

    其中,自定义规则遵循如下情况:

基本类型大写:即char 类型 改变为CHAR。

指针类型在其指向数据类型前添加“LP”或“P”即:DWORD的指针类型为“LPDWORD”和“PDWORD”。

句柄类型命名方式一般在对象前添加“H”.

无符号类型一般是以“U”开头,即:“INT”是符号类型,“UINT”则是无符号类型。

    

    Windows 应用程序都是“消息(事件)驱动”的,任何一个窗口都能够接收消息,并对该消息做出相应的处理。Windows系统和应用程序均可产生消息。任何一个动作都会产生,比如:“点击”,“移动鼠标”,“敲击键盘”,“改变窗口大小”。

    Windows中有个系统消息队列,以及分别为每个GUI线程维护一个各自的线程消息队列(应用程序消息队列),

    UI线程启动一个消息循环,每次从本线程所对应的消息队列中取出一条消息,然后根据消息所包容的信息,将其转发给特定的窗口对象,此窗口对象所对应的“窗体过程”函数被调用以处理这些消息。

    每个窗口都有一个窗口过程来处理窗口接收到的消息,窗口过程是一个回调函数,它是由Windows 自动调用。

    一般窗口程序的开发,遵循如下图的流程:

    WNDCLASS结构体:

    窗口类WNDCLASS是Windows中用于创建窗口的模板,每个窗口类都有一个窗口过程(WndProc),负责处理发送该类窗口的所有的消息,一个应用程序在创建某类型的窗口前,必须先注册窗口类。

    该窗口类主要有三种:

系统窗口类:系统内部使用,即基本的控件窗口类。

应用程序全局窗口类:注册窗口时,以CS_GLOBALCLASS标志注册的窗口类,该类可以所有的模块使用,一般为dll模块。

应用程序局部窗口类:没有CS_GLOBALCLASS标志注册的窗口类,只能在模块范围内使用。

   

    创建窗口所需要的API为 CreateWindow()。其结构如下:

    

    注释:其核心的元素为最后一个“IpParam”他是用来“绑定”注册窗口类的指针。

    显示窗口所需要使用的API为ShowWindow(),其结构如下:

    跟新窗口所需要使用的API为UpdateWindow(),其结构如下:

    WNDPROC是一个函数指针,指向窗口过程函数。其定义结构如下:

    注释:详细可以参考如下网址:https://www.xuenixiang.com/thread-2915-1-1.html

    简单的消息循环一般包含三个API函数:GetMessage,TranslateMessage,DispatchMessage。常见写法如下:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-5-27 21:52 被天象独行编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 453
活跃值: (134)
能力值: (RANK:0 )
在线值:
发帖
回帖
粉丝
2
写得不错,不过,我一直在想:
我有了c++标准库,为啥还用`windows`的`api`,而且`windows`的`api`又难用.
我实在不知道为什么.
2021-5-26 16:24
0
雪    币: 1041
活跃值: (733)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
可以实现自绘窗口好看的界面吗有没有案例直接用api完成不要其他mfc qt等的框架
2021-7-26 22:48
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码