《Windows程序设计》读书笔记一 起步
2016-06-05 22:31
183 查看
最近因为工作的关系,要开始在windows上开发桌面应用。虽然只是一些UI程序,但是不深刻了解windows的各种API在开发应用的过程中会遇到不少阻碍。
于是决定重拾windows API,由于MFC框架太老。除了进行旧代码维护以外已经很少使用了。所以暂时不考虑使用MFC,而是使用纯win32 API来进行开发。可能开发UI上效率会低于MFC,但是重点是为了搞清楚win32 api的应用。对于在windows上开发的程序员来说,学习经典的windows编程非常重要,就算你使用C#,QT甚至Java语言来开发windows程序。因为学些这些API不仅仅是能让你编写代码, 更重要的事能够让你了解windows操作系统的机制。
由于win32 api大多数使用c语言编写,所以与api接口部分将使用标准的C语法。应用框架使用C++面向对象来编写。使用的环境是Visual Studio Community 2015 + visual assistX
1.1 Windows环境
1.2 Windows编程选项
书中使用的是10多年前的VC++6.0 由于版本年代久远,所以使用了最新的Visual Studio Community 2015来进行编译。
1.3 你的第一个Windows程序
1.3.3 头文件
windows.h中包含了其他若干非常重要的头文件
windef.h 基本数据类型定义
winnt.h 支持unicode的类型定义
winbase.h 内核函数
winuser.h 用户界面函数
wingdi.h 图形设备接口函数
WinMain() 是所有windows程序的入口申明与winbase.h
原形如下 windows
在windef.h中有WINAPI的定义
#define WINAPI __stdcall
规定了一种函数调用约定,表明如何在生成的堆栈中放置函数调用参数的机器代码。绝大多数windows api调用都定义成WINAPI
在32位windows中,hPrevInstance总是定义为NULL
第三个参数表明程序的命令行参数。
第四个参数表明程序最初如何显示,正常,最大化或者最小化在任务栏等。
1.3.5 MessageBox函数
第一个暂略,第二个参数是显示的消息,第三个参数是消息框的标题栏。 TEXT宏是为了兼容unicode应用
第四个参数是一系列MB_ 打头的参数用来表示消息框显示哪种按钮,定义在winuser.h中
#define MB_OK 0x00000000L
#define MB_OKCANCEL 0x00000001L
#define MB_ABORTRETRYIGNORE 0x00000002L
#define MB_YESNOCANCEL 0x00000003L
#define MB_YESNO 0x00000004L
#define MB_RETRYCANCEL 0x00000005L
在该案例中MessageBox 返回ID_OK 1 也可能返回其他值
于是决定重拾windows API,由于MFC框架太老。除了进行旧代码维护以外已经很少使用了。所以暂时不考虑使用MFC,而是使用纯win32 API来进行开发。可能开发UI上效率会低于MFC,但是重点是为了搞清楚win32 api的应用。对于在windows上开发的程序员来说,学习经典的windows编程非常重要,就算你使用C#,QT甚至Java语言来开发windows程序。因为学些这些API不仅仅是能让你编写代码, 更重要的事能够让你了解windows操作系统的机制。
由于win32 api大多数使用c语言编写,所以与api接口部分将使用标准的C语法。应用框架使用C++面向对象来编写。使用的环境是Visual Studio Community 2015 + visual assistX
1.1 Windows环境
1.2 Windows编程选项
书中使用的是10多年前的VC++6.0 由于版本年代久远,所以使用了最新的Visual Studio Community 2015来进行编译。
1.3 你的第一个Windows程序
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { MessageBox(NULL, TEXT("Hello, Windows 7 x64 Service Pack 1"), TEXT("HelloMsg"), 0); return 0; }
1.3.3 头文件
windows.h中包含了其他若干非常重要的头文件
windef.h 基本数据类型定义
winnt.h 支持unicode的类型定义
winbase.h 内核函数
winuser.h 用户界面函数
wingdi.h 图形设备接口函数
WinMain() 是所有windows程序的入口申明与winbase.h
原形如下 windows
int WINAPI WinMain ( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd );
在windef.h中有WINAPI的定义
#define WINAPI __stdcall
规定了一种函数调用约定,表明如何在生成的堆栈中放置函数调用参数的机器代码。绝大多数windows api调用都定义成WINAPI
在32位windows中,hPrevInstance总是定义为NULL
第三个参数表明程序的命令行参数。
第四个参数表明程序最初如何显示,正常,最大化或者最小化在任务栏等。
1.3.5 MessageBox函数
第一个暂略,第二个参数是显示的消息,第三个参数是消息框的标题栏。 TEXT宏是为了兼容unicode应用
第四个参数是一系列MB_ 打头的参数用来表示消息框显示哪种按钮,定义在winuser.h中
#define MB_OK 0x00000000L
#define MB_OKCANCEL 0x00000001L
#define MB_ABORTRETRYIGNORE 0x00000002L
#define MB_YESNOCANCEL 0x00000003L
#define MB_YESNO 0x00000004L
#define MB_RETRYCANCEL 0x00000005L
在该案例中MessageBox 返回ID_OK 1 也可能返回其他值
相关文章推荐
- 10+31=100小组项目第四周总结报告
- JavaScript 数组去重
- iOS开发网络篇—网络编程基础
- K8S实战——SIG PIPE问题造成kubernetes集群工作不正常的分析
- HDU:2073 无限的路(数学,水)
- BZOJ 2124 等差子序列
- MySQL中replace into语句的用法详解
- Linux下的进程管理——task_struct
- HDU 5710 Digit-Sum (构造)
- Ajax常见错误总结
- Cookie机制理解介绍
- C++第七次上机实验--特殊三位数
- IO多路复用(select poll epoll)
- service
- [RxJS] Filtering operator: single, race
- 自己写的关于实现数字阶乘的方法,一个采用普通方法,一个是采用递归
- vim文本编辑器
- 字符集和字符编码
- C++作业7
- 查看Linux系统当前是多少位