Win32. Windows下的32位编程.
第一阶段学习内容:
Windows 基础、窗口创建机制、消息循环机制、消息的处理、菜单处理、GDI 编程、对话框、控件、资源、目录操作、内存映射、虚拟内存、进程线程、库函数DLL ,LIB。
1. windows四大模块程序.
控制台应用程序----DOS ,没有窗口,入口main()
窗口程序-------------自己的窗口,入口函数WinMain(....)
动态库程序----------dll结尾的程序,有入口DllMain()
静态库程序----------lib结尾的程序.没有入口函数
PS:什么是Win32SDK:
Windows操作系统提供了很多的函数,以方便我们开发Windows应用程序。这些函数是Windows操作系统提供给应用程序编程的接口,简称为API函数(Application Programming Interface)。我们在编写Windows程序时所说的API函数,就是指Windows系统提供的函数,所有主要的Windows函数都在Windows.h头文件中进行了声明。使用windowsAPI创建的能在windows上运行的程序统称为windows程序。
MSDN是微软向开发人员提供的一套帮助系统,其中包含开发文档、技术文章和示例代码。程序员可以利用MSDN来辅助开发,可以利用MSDN来进行学习,几乎所有的WindowsAPI函数都可以在MSDN上找到。VS2008以后,MSDN只有在线的网页版本了,对于初学者,以前的版本也是可以用的。(使用的时候,只需要把光标停留在需要查的函数上按F1)
SDK的全称是Software Development Kit,就是软件开发包。这个开发包通常都会包含API函数库、帮助文档、使用手册、辅助工具等等。SDK实际上就是开发所需资源的一个集合。Win32SDK,就是Windows32位平台下的软件开发包,包括了WindowsAPI函数、帮助文档、微软提供的一些辅助开发工具等等。
2. 编译连接流程
编辑器: 用来编写代码(记事本)
编译器: cl.exe 把代码编译成目标文件obj(cl.exe cpp路径).
链接器:link.exe ----把obj文件和dll或lib文件关联生成exe文件
( link.exe obj文件 lib库名 )
资源编辑器:re.exe 编辑图片,光标 菜单....
3.第一个win32程序的编写
Int WINAPI WinMain(HINSTANCE hInstance,// 实例句柄
HINSTANCE phInstanc, // 父类的实例句柄
LPSTR cmd, // 命令行参数
int show) //显示方式
{ }
实例句柄:一个程序运行在内存中的标识.
4.字符集:
Unicode字符集:windowNT 宽字节字符集.两个字节保存
通常windows中对于函数都会有两个版本,一个正对于多字节字符集的函数,一个正对于款字节字符集的函数.CreateWindowW/A .
UNICODE 编码,在字符串前加L,如果是多字节编码什么都不用加._T()是一个兼容版本,当你是unicode的时候会自动加L 如果多字节什么都不会做.
多字节字符集: Char -----strlen 有一套函数处理
宽字节字符集: wchar_t --- wcslen() ......
兼容的字符集: TCHAR
兼容版本: _tcslen()....
5.小知识点:
MessageBox -----弹出窗口 (堵塞函数)
第一个参数:窗口句柄 NULL; nullptr
第二个参数: 框中显示的内容.
第三个参数: 标题字符串
第四个参数: 标识
MB_OK ----默认ok按钮
MB_YESNO--有是和否两个按钮
MB_YESNOCANCEL--- 有是否 退出
根据返回值判断点击的按钮值.
API : Application(应用)Programming(程序) Interface(接口)
微软为了方便windows程序的开发提供的各种函数.
SDK: 软件开发包.包含API,说明文档,辅助开发工具.
头文件: windows.h---包含了很多的windows的头文件.使用方便
Winbase.h---- 内核API接口的封装, kernel32.dll
Winuser.h-------用户API,用户接口 user32.dll
Socket------------ws_32.lib
Mmsystem.h----音乐播放的头文件. Winmm.lib.
音乐播放: PlaySound() ----WAV
第一个参数: 播放的音乐文件名或者资源id的字符串
第二个参数:实例句柄
第三个参数:播放标识:
SND_SYNC----同步播放,播放完成后函数才返回,堵塞
SND_ASYNC---异步播放,开始播放后直接返回
SND_LOOP---循环播放
SND_FINENAME 根据文件名进行播放
SND_RESOURCE 根据资源文件进行播放
如果第一个参数是NULL 则停止播放
mciSendString()----MP3
6.代码调试:
错误信息处理:GetLastError(); 得到最后一个errorID
OutputDebugString----在输出窗口显示内容.只有debuge版本才会输出
设置: options/force.... 设为选择状态才可以使用OutputDebugString
断言: assert(真),如果为假则弹出异常窗口
TRACE: 就是OutputDebugString的封装.