一、应用程序分类

控制台程序
窗口程序
库程序:静态库程序,动态库程序

二、开发工具

编译工具:
编译器cl.exe
链接器link.exe
资源编译器rc.exe

三、Windows库

库:
kernel32.dll - 提供核心的API,例如进程、线程、内存管理等;
user32.dll - 提供窗口、消息等API;
gdi32.dll - 绘图相关的API。
头文件:
windef.h - windows数据类型;
winbase.h - kernel32 API的头文件;
wingdi.h - gdi32 API的头文件;
winuser.h - user32 API的头文件;
winnt.h - Unicode字符集文件;
windows.h - 所有windows头文件的集合。

四、字符集编码

1、编码历史
ASC->ASCII->DBCS->UNICODE
windows上unicode一般用utf-16,中英文都为双字节。
2、宽字节字符
wchar_t每个字符占2个字节
char每个字符占1个字节
wchar_t实际是unsigned short类型,定义时需要增加“L”通知编译器按照双字节编译字符串,采用Unicode编码。
需要使用支持wchar_t函数操作宽字节字符串。例如:

const wchar_t* pwszText = L"Hello wchar",
wprintf(L"%s\n", pwszText);

如果分不清用char还是wchar_t,可以使用TCHAR,TCHAR是微软用宏定义的推导字符类型,。
const TCHAR* tstr = __TEXT(“hello tchar”);
#ifdef UNICODE
wprintf(L"%s, %d\n", tstr, wcslen(tstr));
#else
printf(“%s, %d\n”, tstr, strlen(tstr));
#endif
3、系统调用函数的参数类型
LPSTR == char* LPCSTR == const char*
LPWSTR == wchar_t* LPCWSTR == const wchar_t*
LPTSTR == TCHAR* LPCTSTR == const TCHAR*

五、创建窗口步骤

1、创建入口函数
2、注册窗口类
3、创建窗口
4、显示窗口
5、消息循环

六、窗口类

https://docs.microsoft.com/zh-cn/windows/win32/winmsg/about-window-classes
1、概念
窗口类是包含了窗口各种参数信息的数据结构;
每个窗口都具有窗口类,基于窗口类创建窗口;
每个窗口类都具有一个名称,使用前必须注册到系统。
2、分类
系统窗口类

| 系统窗口类 | 说明 |
|Button|按钮的类|
| ComboBox | 组合框的类 |
| Edit | 编辑控件的类 |
|ListBox|列表框的类|
| MDIClient | MDI客户端窗口的类 |
|ScrollBar| 滚动条的类 |
|Static|静态控件的类|
应用程序全局类
应用程序本地类
style窗口类分格
应用程序全局窗口类的注册,需要在窗口类的分格中增加CS_GLOBALCLASS。
例如:
WNIDCLASS wc{0};
wc.style = …|CS_GLOBALCLASS;
应用程序局部窗口类,在注册窗口类时,不添加CS_GLOBALCLASS风格。
其它分格:
CS_HREDRAW - 当窗口水平变化时,窗口重新绘制;
CS_VERDRAW - 当窗口垂直变化时,窗口重新绘制;
CS_DBLCLKS - 允许窗口接收鼠标双击;
CS_NOCLOSE - 窗口没有关闭按钮。

七、创建窗口

CreateWindow();
CreateWindowEx();
创建子窗口:设置父窗口句柄;窗口风格增加WS_CHILD | WS_VISIBLE
一个窗口类可以用来创建多个窗口。

八、消息

1、消息组成
窗口句柄
消息ID
消息的两个参数
消息产生的时间
消息产生时的鼠标位置
消息的作用
当系统通知窗口工作时,就采用消息的方式派发给窗口。

/** Message structure*/
typedef struct tagMSG {HWND        hwnd;UINT        message;WPARAM      wParam;LPARAM      lParam;DWORD       time;POINT       pt;
} MSG;

2、 窗口处理函数:
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
系统默认:DefWindowProc。
3、 消息相关函数:
BOOL GetMessage(
LPMSG lpMsg, /存放获取到消息的Buff/
HWND hWnd, /抓取消息的窗口句柄/
UINT wMsgFilterMin, /获取消息的最小ID/
UINT wMsgFilterMax /获取消息的最大ID/
); //获取消息
返回值:如果抓到的消息为WM_QUIT,则返回0,其它返回非零。
BOOL TranslateMessage(
CONST MSG *lpMsg /要翻译的消息地址/
); //翻译消息,将可见按键消息翻译成字符消息。检查消息是否是按键的消息,如果不是按键消息,不做任何处理,继续执行。

LRESULT DispatchMessage(
CONST MSG *lpMsg /要派发的消息/
);//将消息派发到该消息所属窗口的窗口处理函数上。
4、常用消息类型
WM_DESTROY
产生时间:窗口被销毁时的消息;
附带消息:wParam:0 ,lParam 0;
一般用法:常用于在窗口被销毁之前,做 相应的善后处理,例如资源、内存等。
WM_SYSCOMMAND
产生时间:当点击窗口的最大化、最小化、关闭等按钮。
附带消息:wParam:具体点击的位置,例如关闭SC_CLOSE等;
lParam:鼠标光标位置(LOWORD, HIWORD)水平和垂直位置
一般用法:常用在窗口关闭时,提示用户处理。
WM_CREATE
产生时间:在窗口创建成功但还未显示时
附带消息:wParam:0;
lParam: 为CREATESTRUCT类型的指针;通过这个指针可以获取CreateWindowEx中的全部12个参数的信息。
一般用法:常用于初始化窗口的参数、资源等,包括创建子窗口等。
WM_SIZE
产生时间:在窗口的大小发生变化后
附带信息:wParam:窗口大小变化的原因
lParam:窗口变化后的大小
LOWORD(lParam)//变化后的宽度
HIWORD(lParam)//变化后的高度
一般用法:常用于出口大小变化后,调整窗口内各个部分的布局。
WM_QUIT
产生时间:程序员发送
附带消息:wParam:PostQuitMessage函数传递的参数
lParam : 0
一般用法:用于结束消息循环,当GetMessage收到这个消息后,会返回FALSE,结束while处理,退出消息循环。
WM_PAINT
产生时间:当窗口需要绘制时(或GetMessage检测到窗口需要重新绘制)
附带消息:wParam:0,lParam:0;
专职用法:用于绘图。
5、消息循环
GetMessage - 从系统获取消息,将消息从系统中移除,阻塞函数。当系统无消息时,会等候下一条消息。
PeekMessage - 以查看的方式从系统获取消息,可以不将消息从系统移除,非阻塞函数。当系统无消息时,返回FALSE,继续执行后续代码。
BOOL PeekMessage(
LPMSG lpMsg, //message information
HWND hWnd, //handle to window
UINT wMsgFilterMin, //first message
UINT wMsgFilterMax, //last message
UINT wRemoveMsg //移除标识, PM_REMOVE/PM_NOREMOVE
);
6、发送消息
SendMessage - 发送消息,会等候消息处理的结果,阻塞函数;
PostMessage - 投递消息,消息发出后立刻返回,不会等待消息执行结果,非阻塞函数。
BOOL SendMessage/PostMessage(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
7、消息类型
系统消息 - ID范围 0-0x03FF
由系统定义好的消息,可以在程序中直接使用。
用户自定义消息 - ID范围0x0400 - 0x7FFF(31743)
由用户自己定义,满足用户自己的需求。用户自己发出消息,并响应处理。
自定义消息宏:WM_USER

Win32基础学习笔记相关推荐

  1. 多人网络游戏服务器开发基础学习笔记 II: 帧同步 | 游戏客户端预测原理分析 | FPS 游戏状态同步

    这篇是对书本 网络多人游戏架构与编程 的学习第二篇(第一篇:多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | ...

  2. Task 06 数据增强;模型微调;目标检测基础 学习笔记

    Task 06 数据增强:模型微调:目标检测基础 学习笔记 数据增强 图像增广 在5.6节(深度卷积神经网络)里我们提到过,大规模数据集是成功应用深度神经网络的前提.图像增广(image augmen ...

  3. guido正式发布python年份_Python 基础学习笔记.docx

    Python 基础学习笔记 基于<Python语言程序设计基础(第2版)> 第一部分 初识Python语言 第1章 程序设计基本方法 1.1 计算机的概念 计算机是根据指令操作数据的设备, ...

  4. ASP.Net MVC开发基础学习笔记(5):区域、模板页与WebAPI初步

    http://blog.jobbole.com/85008/ ASP.Net MVC开发基础学习笔记(5):区域.模板页与WebAPI初步 2015/03/17 · IT技术 · .Net, Asp. ...

  5. Python3 基础学习笔记 C09【文件和异常】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  6. Python3 基础学习笔记 C08 【类】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  7. Python3 基础学习笔记 C07【函数】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  8. Python3 基础学习笔记 C06【用户输入和 while 循环】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  9. Python3 基础学习笔记 C05【字典】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

  10. Python3 基础学习笔记 C04【if 语句】

    CSDN 课程推荐:<8小时Python零基础轻松入门>,讲师齐伟,苏州研途教育科技有限公司CTO,苏州大学应用统计专业硕士生指导委员会委员:已出版<跟老齐学Python:轻松入门& ...

最新文章

  1. 【Java】监听jframe窗口大小改变函数:addComponentListener
  2. JavaScript基本概念——数据类型
  3. libpcap捕包机制分析(三)
  4. 用navicate 连接本地数据库提示用户名/口令无效
  5. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第1章-引言
  6. Android中设置EditText默认无焦点
  7. 1CCTableView的使用,TableView响应和小格子tableView实现
  8. matlab在振动信号处理中的应用_Matlab面向对象程序设计及其在地球物理学中的应用(4)——类的属性
  9. html网页响应时间调试,HTML5 使用performance.now衡量Webworker的响应时间
  10. linux下被遗忘的gpio_keys按键驱动
  11. 【html xml】gt; 大于 lt; 小于
  12. Dynamica AX2012 Tmp Table or Form 获取数据
  13. 云流送技术可以支持多人交互吗?
  14. 云计算之路-阿里云上:一夜之间竞价服务器全没了
  15. Python:SM4
  16. 李想又要赴美上市了,高中辍学的他凭什么?
  17. 免费试用丨阿拉丁统计2.0 产品全新升级,五大优势功能满足多种需求
  18. Linux系统通过iso镜像作为源,安装gedit命令
  19. 开源Web应用程序平台Sandstorm入门
  20. TensorFlow2.4可以在MacBook Pro/Mac Pro上利用GPU做机器学习训练了

热门文章

  1. 原则与思维模型--《思维模型》2
  2. python pyplot bar 参数_数据可视化之条形图(1):Axes.bar
  3. 机械考公一般有哪些岗位?
  4. android脚本精灵开发,触动精灵脚本开发示例代码
  5. 怎么布置mysql数据库_MySQL数据库的安装,配置
  6. the voyage游戏android,Voyage游戏
  7. 【温故而知新】计算机408之计算机网络速记
  8. php time()的用法,PHP timezone_name_from_abbr() 函数用法及示例
  9. 输入法 箭头符号大全
  10. Infomages: Embedding Data into Thematic Images