技术标签: c++ Windows windows 开发语言
Windows编程的本质就是使用好操作系统,想要用好操作系统必不可少的秘籍----MSDN。
Windows编程主要分为两种:
1、控制台编程(CUI)
2、图形界面编程(GUI)
Windows编程的基本要素
#include < windows.h>
在进行windows编程的时候需要包含一个新的万能头文件。
Windows.h 它是一个综合性头文件,它里面包含了许多其它都文件。
UINT 无符号32位整型
DWORD 32位整数
PDWORD 32位整数类型指针。
BOOL 布尔类型
SHORT 带符号16位整数。
LRSULT 32位函数返回值
WPARAM 32位的消息参数。
LPARAM 32位的消息参数。
HANDLE
是windows编程中一个特别重要的概念,在计算机中翻译为句柄。用于标示操作系统中的某个对象。
HANDLE 通用句柄
HWND 窗口句柄
HINSTANCE 实例句柄
windows包含这三种字符串类型,他们分别是:
CHAR
字符型,相当于char
WCHAR
宽字符型,相当于wchar_t
TCHAR
是一种条件编译的类型,根据条件可以代表wchar_t或char。
还有这些类型的指针类型:
PWCHAR WCHAR的指针类型
PTCHAR TCHAR的指针类型
PCWCHAR const WCHAR的指针类型
我们没有必要完全记住这些参数,我们只需要知道他们的普通用法就可以了。
三种字符型的比较:
CHAR charc[] = "123456"; //CHAR类型可以直接写出来
WCHAR charw[] = L"123456"; //WCHAR类型需要在字符串前面加上L标记其为宽字符类型
TCHAR chart[] = _T("123456"); //TCHAR类型需要以_T类型来表示
printf("%d\n",sizeof( charc));
printf("%d\n",sizeof( charw));
printf("%d\n",sizeof( chart));
TCHAR类型会根据你设置的字符串为标准,来适应成不同的类型。
unicode字符集为标准: TCHAR的字长 = WCHAR的字长
多字节字符集为标准: TCAHR的字长 = CHAR的字长
printf("%s\n", charc);
printf("%ws %ls\n", charw, charw);
// unicode字符集:printf("%ws\n", chart);
// 多字节字符集: printf("%s\n",chart);
CHAR类型直接用%s 打印
WCHAR类型用 %ls 或者%ws打印
TCHAR类型用%s或者%ws打印,这取决于你的字符集设置。
字符串的长度
printf("%zd\n", strlen(charc));
printf("%zd\n", wcslen(charw));
printf("%zd\n", _tcslen(chart));
他们仅仅只有长度函数调用的不同:
在windows中,我们有一个类似于C/C++的入口函数,如main函数。
在windows中,这个入口是这样的:
//类似于main函数
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
//代码区
return 0;
}
你可以会觉得,这是什么鬼,怎么这么多参数,我们以前写的C++的mina最多也就两个参数啊,但是,你必须接受这个现实,windows编程有非常多的复杂概念,和非常复杂的声明等等。
例如:这前两个参数:HINSTANCE 这他喵的什么鬼??? 我们以前见过double,int,long,我们都可以很清晰的知道他们是什么意思,但是这玩意可读性这么差,而且还都是大写,怎么记得住啊。
但是!!
我们千万不要记住这些东西,浪费这些时间记住没用的参数是没有用的,我们完全不需要记,我们只需要记住特定的函数名字就可以,然后我们(在VS环境下)按F1 就可以找到他的官方文档,然后直接把文档的函数原型复制即可:
步骤:
WinMain
然后你在那个文档里,还可以找到很多关于此函数的信息:
例如他的每个参数的含义:
我们千万不要死记硬背,要灵活使用F1查看帮助文档。
那么我们已经写好了入口函数,应该如何编写一个最简单的windows应用程序呢?
首先我们先把此项目的属性改为 窗口
类型。
因为我们编写的已经不是黑窗口的控制台程序了,而是图形界面编程。。
我们使用MessageBoxW在产生一个最简单的弹窗:
#include <Windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)
{
MessageBoxW(NULL, L"提示", L"提示", MB_OK);
return 0;
}
注意:
MessageBoxW:
MessageBox又可以分为 MessageBox ,MessageBoxA , MessageBoxW等多种不同类型,我们统一使用MeseageBoxW 类型,因为以宽字符调用,我们输入字符串时也能够适应宽字符,兼容性比较好。。
程序运行结果:
我们已经完成了第一个窗口的实例,接下来我们将学习如何编写一个正规的第一个窗口。
文章浏览阅读379次,点赞5次,收藏10次。问题是学习的先导,教师的有效提问能够激发学生的学习兴趣,调动学生积极思考,当提问指向疑惑处、关键处和思考处时,既为学生指明思考的方向,提供思考的空间,又能引发学生深入思考,提升学习的深度和广度。在《摸球游戏》一课的教学中,一位男生连着6次都摸出了黄球(盒内装有形状、大小相同,质量相等的球,每次摸球都摇匀再摸),学生一片欢呼,都认为他再次摸出的一定也是黄球。聚焦学生的思考处,教师通过提问引发学生深度思考,不仅帮助学生充分利用已有的旧知来学习新知,而且使学生学会学习,有利于学生在今后的数学学习中进行运用。
文章浏览阅读1.2k次。解决jupyter一直显示内核准备中....maybe helpful:)_jupyter内核正在启动,请等待
文章浏览阅读1.4k次。一、数据流分析1.1 介绍原理:数据流分析的原理可参考这些文章 Useful Literature。说明:phasar提供了很多复杂机制,以便于用户自定义数据流分析。用户针对自己的需求,选择最合适的接口,用户只需要提供一个新类,即可实现该接口缺少的功能,该功能可作为分析的问题描述。将具体问题描述交给求解器求解,以下将列出多种数据流求解器。(1)选择控制流图首先需选择一种控制流图,以基于此图进行分析,如CFG (intra-procedural control-flow graph) 或 ICFG _phasar框架
文章浏览阅读1.8k次。声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!Metasploit实验:制作免杀payload+对任意“外网”主机的远控这个试验的实现需要拆分成下面三个模块:内网穿透到外网制作免杀木马后门Metasploit控制客户机环境准备操作系统用途IP地址需要软件Kali制作payl..._metasploit内网穿透
文章浏览阅读230次。605. 简单乘积//C++版本 #include <bits/stdc++.h>using namespace std;int main(){ int a,b,X; cin>>a>>b; X=a*b; printf("PROD = %d",X); return 0;}#python版本a=int(input())b=int(input())print("PROD = %d"%(a*b))611. 简单计算/_"print(\"volume = %.3f"
文章浏览阅读1.9k次。这种情况下就是它的激活出现了问题,如果账号的使用权没有问题的话,就将该插件disable之后再重新enable,重新观察输出,就会看到copilot在重新链接引擎了,一次不行就多进行几次。在使用github copilot的时候,插件不工作,后台出现了这种输出,然后就能重新使用了,_copilot no completions were found
文章浏览阅读7.4k次,点赞7次,收藏74次。背景:网络传输层中,一般采用TCP协议,如果要建立连接,客户端会先发送syn包请求,服务器接收,接收后,再传递给客户端ack,syn包,这个时候,客户端再次回应,传回ack包。可是问题就出在,如果我是客户端,只发送一个请求syn包,然后第三次握手的时候,不再往回传ack包,此时服务端是不是就要等待?在等待的时间里,我是不是可以伪造更多的请求,从而不断消耗服务器的资源,..._怎么用python给tcp协议的ip和端口做ddos
文章浏览阅读476次,点赞14次,收藏10次。先给友友们交代一下个人背景:楼主22年毕业于一所985,大三下的时候在字节跳动实习过小半年,毕业后选了阿里巴巴的Offer,担任前端开发工程师的职位,尔来也有1年半的光载。
文章浏览阅读1.2k次,点赞2次,收藏6次。【代码】[Errno 2] No such file or directory: ‘:/usr/local/cuda-11.7:/usr/local/cuda-11.7/bin/nvcc‘_warnings.warn(msg.format('we could not find ninja.'))
文章浏览阅读888次,点赞16次,收藏14次。人体都有恒定的体温,一般在 37 度,所以会发出特定波长 10uM 左右的红外线,被动式红外探头就是靠探测人体发射的 10uM 左右的红外线而进行工作的。人体发射的 10uM 左右的红外线通过菲泥尔滤光片增强后聚集到红外感应源上。红外感应源通常采用热释电元件,这种元件在接收到人体红外辐射温度发生变化时就会失去电荷平衡,向外释放电荷,后续电路经检测处理后就能产生报警信号。人体红外模块是一种能够检测人或动物发射的红外线而输出电信号的传感器。广泛应用于各种自动化控制装置中。_人体传感器csdn
文章浏览阅读3.9w次,点赞14次,收藏32次。## vector _find方法的使用 不同于map(map有find方法),vector本身是没有 find这一方法的,其find函数是依靠algorithm来实现的 所有要使用#include<algorithm> 例如:vector<int>::iterator it = find(vec.begin(),vec.end(),1); if(it != vec.end()) cout<<"found"<<endl; else _vector find
文章浏览阅读5.4k次,点赞55次,收藏109次。EXTI——外部中断/事件控制器。外部中断简介,EXTI初始化结构体,外部中断控制实验。利用按键输入作为中断的外部输入,产生中断后,进入中断服务函数,实现LED状态的变化。_stm32外部中断上升沿下降沿都触发 如何区分