-
2022-04-22 12:21:08
Windows编程——Hello World
开发工具
Visual Studio 2013
效果展示
源代码
#include <Windows.h> //头文件 //主函数 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow) { //弹出一个消息提示框,变量 n 用来接受用户的选择 int n = MessageBox(NULL, L"Hello World", L"温馨提示", MB_YESNOCANCEL | MB_ICONEXCLAMATION); if (n == IDYES) //用户选择“是” { MessageBox(NULL, L"你点了“是”", L"提示", MB_OK); } else if (n == IDNO) //用户选择“否” { MessageBox(NULL, L"你点了“否”", L"提示", MB_OK); } else if (n == IDCANCEL) //用户选择“取消” { MessageBox(NULL, L"你点了“取消”", L"提示", MB_OK); } return 0; }
主函数
不同于我们熟知的 C/C++ 的 main 函数,Windows 用的是 WinMain,并且前面还多了个 WINAPI,下面我们来详细说一下。
窗口程序的入口函数:WinMain
控制台窗口应用程序入口函数:main什么是 WINAPI ?
WINAPI:函数调用约定。
约定了:
1、函数的入栈方式——从右到左
2、由谁来平衡堆栈WINAPI、CALLBACK、APIENTRY : 从右往左入栈 ,本质:__stdcall(标准调用方式)
WINAPIV : 从右往左入栈,本质:__cdecl
转到定义,发现它们是这样的:
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI主函数参数
HINSTANCE
定义:应用程序实例句柄类型。
转到定义:
DECLARE_HANDLE(HINSTANCE);#define DECLARE_HANDLE(HINSTANCE)
struct HINSTANCE__
{
int unused;
};
typedef struct HINSTANCE__* HINSTANCE由此,可以看出其本质为:结构体指针
hInstancce
定义:当前应用程序实例句柄
hPreInstance
定义:当前程序的前一个实例句柄
在32位和64位的机器上,已经被废弃了,现在不再使用时,值为 NULL
在16位机器上使用LPSTR
typedef CHAR *NPSTR, *LPSTR, PSTR;
上式表示 CHAR <=> NPSTR <=> LPSTR <=> PSTR
typedef char CHAR;所以 ,LPSTR <=> char*
ps : LPCTSRT <=> const char*lpCmdLine
lpCmdLine是一个以空终止的字符串,指定传递给应用程序的命令行参数。
例如:在C盘下有一个 a.txt 文件,当我们用鼠标双击这个文件时将启动记事本程序(notepad.exe),此时系统会将 C:\a.txt 作为命令行参数传递给记事本程序的 WinMain 函数,记事本程序在得到这个文件的全路径名后,就在窗口中显示该文件的内容。nCmdShow
窗口显示方式:最大化,最小化,普通,正常显示
MessageBox
Windows编程中经常用到的一个API,作用是弹出一个消息提示框
int WINAPI MessageBox (
In_opt HWND hWnd,
In_opt LPCTSTR lpText,
In_opt LPCTSTR lpCaption,
In UINT uType
);详细解释
第一个参数:
HWND : 窗口句柄类型(可以理解为窗口的ID)
hWnd : 父窗口句柄,如果没有父窗口,就写NULL
HWND 本质为结构体指针DECLARE_HANDLE (HWND);
#define DECLARE_HANDLE(name)
struct HWND__
{
int unused;
};
typedef struct HWND__ *HWND第二个参数:
LPCTSTR :显示内容
LPCTSTR 在 Unicode 编码情况下typedef LPCWSTR PCTSTR, LPCTSTR;
typedef CONST WCHAR *LPCWSTR, *PCWSTR;
#define CONST const
typedef wchar_t WCHAR;本质:const wchar_t* <=> LPCTSTR
LPCTSTR 在 多字节字符集 情况下
typedef LPCTSTR PCTSTR, LPCTSTR; LPCTSTR <=> PCTSTR <=> LPCTSTR
typedef CONST CHAR *LPCWSTR, PCWSTR; CONST CHAR <=> LPCTSTR <=> PCWSTR
#define CONST const CONST <=> const
typedef char CHAR; // char<=> CHAR本质:const char* <=> LPCTSTR
第三个参数:标题
第四个参数:
非客户区的按钮和图标规则
按钮和图标的组合
不能按钮和按钮组合
不能图标和图标组合按钮主要有
按钮 功能 MB_OK 确定 MB_YESNO 是、否 MB_OKCANCEL 确定、取消 MB_YESNOCANCEL 是、否、取消 MB_RETRYCANCEL 重试、取消 MB_ABORTRETRYIGNORE 中止、重试、忽略 图标主要有
图标 功能 MB_ICONEXCLAMATION An exclamation-point icon appears in the message box. MB_ICONINFORMATION An icon consisting of an “I” in a circle appears in the message box. MB_ICONQUESTION A question-mark icon appears in the message box. MB_ICONSTOP A stop-sign icon appears in the message box. 小知识
API
应用程序编程接口(Aplication Programma Interface)
例如C语言中的 printf,scanf,strlen 函数
Windows API函数SDK
软件开发包(Software Development Kit)
包含了API函数库,帮助手册,辅助工具,使用文档窗口
包含标题栏、菜单栏、系统菜单、最下化框,最大化框,滚动
窗口主要分为 客户区 和 非客户区句柄
标志着一种资源
窗口句柄、图标句柄、光标句柄、菜单句柄、进程句柄、线程句柄这次的分享就到这里啦
更多相关内容 -
开发一个window操作系统究竟要多少行代码呢?
2018-12-03 19:50:29微软的Windows系统是伴随我们已久的老朋友了,大多数人都是一代一代Windows的用上来,老用户几乎都形成一个共识,就是微软的系统...那么,微软的Windows系统用了这么久,究竟它有多少行代码呢? Microsoft Window...微软的Windows系统是伴随我们已久的老朋友了,大多数人都是一代一代Windows的用上来,老用户几乎都形成一个共识,就是微软的系统有一代会很好,也有一代会很糟糕,比如Windows XP、Windows 7就很受欢迎,而Windows 2000、Windows Vista就是一个悲伤的故事。那么,微软的Windows系统用了这么久,究竟它有多少行代码呢?
Microsoft Windows问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。下面我们从代码行数、开发难度,参与人员的数量,开发的时间长度等角度来说说,一个windows系统有多复杂。
Windows XP大约40,000,000行代码。
Windows Vista 大约50,000,000行代码,算上修正掉的代码估计超过一亿行。内部版本超过上千个,每个版本都有所测试。为其做出贡献的正式工合约工临时工超过数万人。大概的工程量可能和胡夫金字塔相当。
Windows 7 大约50,000,000行代码。Windows 7开发的时候有23个小组,每个小组约40人,也就是将近1000人。这仅仅是Windows团队的人数,其余为其做出贡献的更是数不胜数。
几千万行代码的工作量是个什么概念?举个参照系吧,很多人在用的金山的WPS代码行数约有150万行,而金山软件公司重写这个级别的办公软件WPS,用了3年时间。
再比如微软在4年前的研发成本超过100亿美元,在开发Windows Vista的所花费的研发费用更是超过了恐怖的200亿美元。Linux内核开发根据人员投入的规模测算,也耗资数有十亿美元。
假如一个桌面级的操作系统代码规模在千万行数量级,如果加上配套软件,总规模应该超过一亿行,如果再加上一个完整的软件生态系统,那么总规模应该不少于十亿行。这还是成熟的系统,再加上调试精简前更多。再加上各个功能之间需要兼容性,可维护性,可管理性等这些随着代码的越来越多可推敲,需考虑的问题也会越来越多,是项技术难度非常大的工作!你觉得呢?
-
Win 10 源码有多少行?用了什么编程语言?
2019-04-15 20:28:05(给程序员的那些事加星标)原创整理:程序员的那些事(id:iProgrammer)2013 年 10 月,我们在微博(@程序员的那些事)发过一张信息图《知名软件系统代码...(给程序员的那些事加星标)
原创整理:程序员的那些事(id:iProgrammer)
2013 年 10 月,我们在微博(@程序员的那些事 )发过一张信息图《知名软件系统代码库对比》。
信息图中提到,Windows XP 和 Windows 7 操作系统的代码量约 4 千万行级别。
(信息图部分截图,完整版在这里:http://t.cn/EXMs07e )
Windows Vista 源码体量约 5 千万行。
所以,Windows 10 源码体量至少在 5 千万行咯。
Windows 操作系统是用什么编程语言开发的?
Windows 操作系统这么个量级的代码库,用了哪些/哪种编程语言,肯定有人好奇。
这不,就有人在 Quora 发帖问《开发 Windows 10 用了哪种编程语言?》
2019 年 3 月,微软内核工程师 Axel Rietschin 在 Quora 上回复了这个帖子。
「程序员的那些事」摘编如下:
Axel 说,Windows 10 和 Windows 8.x、7、Vista、XP、2000 和 NT 有着相同的代码库,每一代操作系统都经历了重大的重构,添加了大量的新特性,改进了性能、硬件支持和安全性,同时保持了非常高的向后兼容性。
内核(ntoskrnl.exe)大部分是用 C 语言编写的。在 Github 可以找到 Windows Research Kernel 的泄露版。
有兴趣的童鞋可以看看:github.com/markjandrews/wrk-v1.2
Axel 表示,虽然 WRK 代码已经过时了,而且很大程度上还不完整,但那些代码应该会给大家一些深刻的见解。
比如:wrk-v1.2/base/ntos/config 目录下是大家熟知的注册表(Registry)的源码,这个内核组件就是配置管理器(configuration manager,CM)。
在内核模式下运行的大多数程序,也是用 C 语言编写的(大多数文件系统、网络、大多数驱动程序……),还有一些 C++。
至于 Window 10 是用什么编程语言写的,Axel 认为是 C 和 C++,并且 C 占了绝大部分。
.NET BCL 和其他托管库及框架通常都是用 C# 编写的,来自不同的部门(开发者部门),并且也不属于 Windows 源代码树。相比散落着 C++ 岛屿的 C 代码海洋,C# 写的代码简直就是沧海一粟。
Windows 真的真的真的真的真的很大
Axel 提示大家,大多数人没有意识到 Windows 系统的庞大,真一个具有史诗规模的巨大项目。
Windows 的完整源代码树(包括全部代码、测试代码等)的大小超过 0.5 TB,涉及 56 多万个文件夹,400 多万个文件。
你可以花一年时间深入源代码树,钻入到那些文件中。它们包括了所有组成 OS 工作站和服务器产品,及其所有版本,工具,相关的开发包。
然后你再读文件名,看看里面有什么,它们是用来做什么的。想做完这些事,一个人(或两个人)恐怕要穷尽一生咯。
有一次 Axel 离开 Git 分支几周,他回来时发现落后了近 6 万次提交。Axel 想有人会说,没人可以每天把添加到 Windows 的所有代码都看完,更不用说去读过去 30 年来编写的代码了!
推荐阅读
(点击标题可跳转阅读)
Windows 3.1 都 25 岁了。你最早用的是哪个 Windows 版本?
关注「程序员的那些事」加星标,不错过圈内事
喜欢就点一下「在看」呗~
-
两行代码实现windows所有系统的激活
2021-01-31 13:38:31两行代码实现windows所有系统的激活 1.在电脑桌面新建【新建文本文档.txt】文档;注意一定要能看到文件的扩展名.txt 2.打开【新建文本文档.txt】文档 3.写入两行代码: slmgr /skms kms.03k.org slmar /ato 4.保存... -
电脑小知识:Windows 10是用什么语言写的?到底有多少行代码?
2020-04-24 15:47:57Windows 10 的code base 和Windows 8.x , 7 , Vista , XP , 2000 和Windows NT的code base 是相同的,当然是演化过来的,其中的每一代都进行了重大的重构,增加了大量的新功能,提升了性能和对硬件,安全的支持,... -
Windows 10是用什么语言写的?有多少行代码?
2019-04-23 08:36:00Windows内核主要是C写的, 有500多G。作者:Axel Rietschin编译:码农翻身这是微软的内核工程师 Axel Rietschin在Quora的一个回... -
两行代码激活windows系统
2021-02-08 21:55:52slmgr /skms kms.03k.org slmgr /ato -
只用70行代码,手把手教你遍历当前windows所有进程!
2021-05-29 23:05:14今天就让kt来带大家动手实践一下,以便提高大家学习的热情,写一段代码C++代码在windows系统上,实现所有进程遍历。 默认大家都已经掌握了一定的C++编程水平,但是掌握度不高也没关系,照着步骤来 -
两行代码实现Windows和Ubuntu20.04虚拟机文件复制(超精简)
2022-03-13 10:28:38因工作需要在Windows系统中安装虚拟机,在VMware中装了Ubuntu20.04,发现文件复制粘贴无法实现拖拽,找了很多方法,都存在各种问题和不方便,操作太麻烦,终于找到两行代码实现两系统间文件直接拖拽的方法,只需要两... -
windows 下代码换行符问题、windows下如何将代码全部从CRLF变成LF
2019-07-05 13:19:44在一些项目中,会严格限制换行符,比如在项目根目录下 .editorconfig 中设置 end_of_line = lf,当你在 Mac 下开发之后,在 Windows 上 clone 代码时, git 会自动将换行变更为系统默认的换行(’\r\n’),而且还是... -
整活小能手!Windows系统滑动关机!一行脚本实现炫酷效果
2021-07-21 21:41:45windows操作系统,只用一行脚本。实现炫酷的滑动关机效果 -
java 一行代码让windows蓝屏
2018-05-18 22:15:54其实呢,这一行java代码只是调了Windows的一个命令而已,和在Windows的CMD里执行 shutdown -s -f 命令一样,而这个命令是关机命令,-s是关机 -f是强制关机的参数。 你想定时关机的话,就是 shutdown -s -t 100 ... -
windows cmd 一行代码修改hosts文件内容
2019-05-25 14:34:50windows+R 输入cmd 回车 cd C:\Windows\System32\drivers\etc echo ### >表示覆盖,>>表示追加 #### >hosts echo 127.0.0.1 aa 127.0.0.1 bb>>hosts -
Windows下 C++代码检测工具
2019-07-06 12:53:22最近在查阅一些windows系统下的C++代码及性能检测工具, 按照检测类别分别静态检测和动态检测。 静态检测: 在程序没有被实际执行的情况下执行的计算机软件分析,大部分是对源代码的分析和检测。 动态检测: 通过... -
激活windows错误代码 0x80072F8F
2020-08-27 10:27:09搜索了一下,通常答案是服务器与本机的时间差异较大,同步时间即可。 但是我在同步多次后仍然报错,猜测验证服务器和本机时区不同,应该是在美国 试着把本机时间改为前一天再验证,成功。 ... -
看一看Facebook工程师是怎么评价《第一行代码》的
2019-08-16 07:56:50大家好,我是一名Facebook的工程师,同时也是《第一行代码——Android》的忠实读者。 虽然我最近几年是在国外读书和工作的,但是和很多人一样,我也非常喜欢郭霖的博客以及他写的《第一行代码——Android》。 事实... -
IntelliJ IDEA - 快速定位代码行
2020-11-19 19:11:28快捷键 Mac:Command + L Windows:Ctrl + G -
一行代码秒变黑客
2021-11-25 16:49:01一行代码秒变黑客 在桌面上新建文本文件。将文件的后缀改为bat。 然后点击鼠标右键。选择编辑模式输入如下代码 start https://pranx.com/hacker/ 点击保存。 双击刚才新建的文件。 也可以选择在cmd中输入以上代码... -
完全免费的Windows代码签名证书(大神勿喷)
2020-12-10 22:01:03对于Windows应用程序的开发人员和软件厂商来说,代码签名可以减少应用程序的错误信息并提高应用程序的的可信度。 软件厂商和个体开发商可对他们通过互联网分销的软件进行数字签名并盖上时间戳, 该数字签名确保了... -
Python用20行代码实现完整邮件功能 [完整代码+建议收藏]
2021-07-15 09:13:26【python实战】女友半夜加班发自拍 python男友用30行代码发现惊天秘密 【python实战】python你TM太皮了——区区30行代码就能记录键盘的一举一动 【python实战】女神相册密码忘记了,我只用Python写了20行代码~~~ ... -
window下统计工程代码行数
2018-04-10 13:41:16window下统计工程代码行数有下面两种方法:一、正则表达式,搜索整个工程(需要打开工程,多个工程有共用的.h,.cpp文件时,统计总工程的代码行数,可以使用第二种方法cloc.exe工具)。二、cloc工具:1.下载最新cloc.... -
MFC Windows程序设计(第2版修订版)--源代码
2012-04-23 02:47:29一部分是由于VisualC++代码生成向导所生成的代码所致,另一个原因是因为无数行代码隐藏在MFC类库中。这正是本书使用特殊的方法来写MFC的缘由。本书从让您亲自手写代码开始(不用向导),使用MFCl.0的应用程序结构风格... -
Windows下使用Git管理本地代码
2017-03-05 00:49:47此操作在多人协作时非常有用,可以用来标识更新代码的用户的身份。 2) 切换到需要创建仓库的文件目录 3) 初始化本地仓库 在仓库目录下,输入指令“git init”来初始化git的本地仓库,该操作... -
【WiFi破解】WiFi密码不知道了怎么办,一行代码轻松破解
2022-02-03 10:50:18不知道WiFi密码?一行代码轻松解决,cmd工具,C:\Users\ASUS>netsh wlan show profiles... -
golang基础1-0:golang环境配置及第一行代码Hello World
2021-12-12 20:28:49golang环境配置及第一行代码Hello World 1.关于开发环境 开发系统环境:windows 11 golang版本:go1.17 开发工具:vs code 2.golang安装 开发包下载地址:golang 进入golang下载地址,选择对应系统的开发包,因为我... -
【C语言】30行代码写出无限重启程序,室友太吵怎么办?
2022-01-06 14:37:33代码解析???? 总结 视频讲解 序 路漫长而阔远,一片星空美到寂。 嗨,这里是狐狸~~ 今天是2022年1月6日,时间飞逝啊,很多同学都已经放寒假了吧,真的很羡慕放假的同学们。先给大家透个底,今天这个项目厉害了... -
在windows下写linux代码直接编译
2018-01-15 17:59:16大多数人都习惯于在windows下用source insight编辑代码,然后用xftp拷贝到linux下进行编译,如果有小的改动,就直接在linux下用vim进行编辑修改。至于为什么是vim,工作这么多年,还没有一家公司的服务器是带界面的... -
windows+svn+redmine实现代码评审
2017-09-22 14:32:44windows平台使用代码版本管理工具较多的是svn,但与svn配套使用的代码审核工具较少,或者说配置相当麻烦。我曾尝试使用reviewboard进行代码审核,但客户端每次都要使用rbt post 命令进行提交diff文件,过于繁琐。... -
python 关于git下unix和windows换行符不同导致稍微改动一行代码git diff就是全部文件对比的解决方案
2017-08-26 16:06:06导致每一次提交代码,就算是一行代码,git diff也是整个文件的增删。真是可恶。