【一】Windows API 零门槛编程指南——MessageBox 基本使用及基础讲解

本篇作为Windows API 系列文章的第一篇,将简要的讲解一下什么是Windows API,Windows API能做些什么,并且尽可能讲解一些新出现的专有名词;本系列博文几乎没有难啃的“专业术语”,尽量让读者能够看明白文章所述内容,是本系列博文的核心宗旨之一。

读本系列博文的读者必须具备以下的知识储备:

  • C/C++语言基础语法及了解面向对象概念

以上列出的这一个点是最核心的知识储备,因为本系列博文将会使用C/C++语言编写的程序作为示例演示Windows API 的效果;使用C/C++ 语言编写Windows应用程序我个人认为是最佳的一种方式,在性能和发掘Windows特性上,我个人认为是首选!

在此如果是编程新手,可以听一下这一段建议:当你学习第一门语言后,例如C语言,发现自己并不能做出什么东西,这个时候千万别产生挫败感!并不是你笨,学了C语言就不会做东西,在相同的知识宽度面前大家都一样,这个时候就需要去涉及其它扩展性知识,如果你是想做Windows程序的开发,那么就可能需要了解Windows API,扩宽你的知识宽度,当拥有了能够用做出产品的知识后,你的产品就会水到渠成了!

Windows API是什么?

首先从API开始理解,API全称为 Application Programming Interface ;Application Programming 可译为 应用程序,其中的 interface 为接口的意思。那么中文名即为 应用程序接口。

那么什么是应用程序接口呢?我们举个例子说明一下情况;应用程序接口可以比作为快递的领取,你不需要知道快递从发送到你收到之间发生的过程,你只需要在快递到达的时候去领取即可;此时领取快递的地点就相当于一个接口,你通过这个接口获取你想要的信息或者是资源,这个接口也只会返回信息或者资源,并不会得到额外的东西。这就是一个接口的定义,屏蔽了其中复杂的过程,你是用这个接口,那么就直接获取到相应的信息。

知道了接口的作用,那么Windows API——Windows 应用程序接口就比较容易理解了,Windows是Windows系统,也是一个应用程序,Windows 提供了不同的服务,这些服务通过一些特定的方式进行调用、使用;这些服务可能是 开启一个窗口、打开一个应用程序、通过一个方法设置系统的休眠时间等;这些不同的服务,做成了接口的方式使用,那么Windows API 也就知道是干什么用的了。

知道了Windows API 为调用Windows 服务的接口,那么现在尝试一下使用Windows API 创建几个对话框。
Windows API 可以查看 Windows API 文档;在Windows API 文档中,查找 MessageBox 即可找到 MessageBox 方法的具体使用方法;通过微软官方API文档参数说明得知 MessageBox 的功能简介如下:

“显示一个模式对话框,该对话框包含系统图标,一组按钮以及特定于应用程序的简短消息,例如状态或错误信息。该消息框返回一个整数值,该整数值指示用户单击了哪个按钮。”

从功能简介上得知,对话框可以包含系统图标、特定的短消息、错误消息;消息框返回一个整数值,判断用户点击的按钮,以便于开发者进行下一步操作。

查看语法:

int MessageBox(HWND    hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT    uType
);

参数说明:

hWnd
类型为 HWND (HWND类型为句柄类型,句柄:句柄为你需要操作的对象的指向、或说为指针,它就像一个锅的手柄一样,你通过手柄就可以拿起来这个锅,它的英文为HANDLE;在本节中,我们并不需要指向什么对象,只需要给一个NULL就ok,在此并不会过多解释句柄。)

hWnd 参数的简单说明为:要创建的消息框的所有者窗口的句柄。如果此参数为空,则消息框没有所有者窗口。

通过参数的简单说明,那么我们可以得到信息:消息窗口可以指定一个窗口的所有者,也可以用面向对象的知识点来理解,那就是指定一个对象为父类,父窗口,如果参数为NULL,那么就表示不指定父窗口。

lpText

类型为 LPCTSTR :是一个指向字符串的指针,参考百科说明,还是说的比较好的:LPCTSTR就表示一个指向const对象的指针。

lpText参数的简单说明为:要显示的消息文本,如果字符串由多行组成,则可以在每行之间使用回车和 / 或换行符分隔行。

通过参数的简单说明,那么我们可以得到信息:LPCTSTR 为需要显示的消息文本。

lpCaption
类型:与lpText一致。

lpCaption对话框标题。如果此参数为空,则默认标题为Error。

通过参数的简单说明,那么我们可以得到信息:lpCaption 为需要显示的消息文本。基本使用规则跟 lpText 类似。

uType

类型为:UINT 无符号整型
对话框的内容和行为。此参数可以是来自以下标志组的标志的组合。

其实对于 uType 这个参数信息点可能并不算多,官方在其中有做补充:

要指示消息框中显示的按钮,请指定以下值之一。
在这里插入图片描述
以上的特定标志组按钮并不是全部,更多请查看微软官方文档 MessageBox说明

在文档中,uType 的参数做出了补充:
在这里插入图片描述
通过以上信息,似乎明白了在使用Windows软件中弹出的对话框的图标怎么设置了。

返回值如下
当这个窗口被点击,或者关闭时,将会有一个返回值。
官方解释如下:

如果一个消息框有一个取消按钮,则该函数返回IDCANCEL如果或者ESC键被按下或值取消按钮被选择。如果消息框没有“
取消”按钮,则按ESC无效。 如果函数失败,则返回值为零。

当函数成功调用,返回如下值:
在这里插入图片描述

那么我们现在就写个例子吧,尝试一下一个对话框的生成!
代码如下:

#include <windows.h> 
int main() 
{ MessageBox (NULL, "Hello, CSDN!2020!", "Hi", MB_ICONSTOP); return 0 ; 
}

从以上代码中,我们引入了 windows.h 头文件;有些看了文档同学可能知道,在微软文档中,MessageBox 是实现在 winuser.h 头文件中,为什么使用Windows.h 头文件呢?

因为 windows.h 头文件包含了 winuser.h,所以直接使用 winuser.h 就可以了。
在入口函数内,第一行我们指定了父窗体为空NULL,要显示的文字是 “Hello, CSDN!2020!” ,标题是 “Hi”,在组合样式中使用的样式是补充的样式 MB_ICONSTOP,应该为下图示样:
在这里插入图片描述
我们编译后运行程序查看效果:
在这里插入图片描述
程序按照正确的方式运行了,不过这个叉不是很好,我们换一个 MB_ICONASTERISK:

#include <windows.h> 
int main() 
{ MessageBox (NULL, "Hello, CSDN!2020!", "Hi", MB_ICONASTERISK); return 0 ; 
}

结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/288126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国人工智能学会通讯——基于视频的行为识别技术 1.1 什么是行为

今天跟大家分享的主题是基于视频的 行为识别领域研究&#xff0c;主要介绍一下早期 的非深度学习传统方法和近期深度学习 方法取得的结果。深度学习方法带来了 非常大的变革&#xff0c;提升了识别系统的性能&#xff0c; 但这并不意味着我们把传统的东西都要 抛弃&#xff0c;…

Windows 11 22H2 22610 重磅发布!删除水印,多彩任务管理器,文件资源管理器深度优化...

面向 Dev 和 Beta 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 22H2 预览版 Build 22610。主要变化1.微软现已更新 Windows 11 任务管理器的进程页面&#xff0c;将随着 Windows 主题颜色而变化。2.微软现已更新锁屏上的电池图标&#xff0c;适配 Windows…

一篇文教你使用python Turtle库画出“精美碎花小清新风格树”快来拿代码!

Turtle库手册可以查询查询 python图形绘制库turtle中文开发文档及示例大全&#xff0c;手册中现有示例&#xff0c;不需要自己动手就可以查看演示。 文章修改记录 修改记录 1&#xff1a;2020年5月17日 12:06:51 由于某些童鞋回复说自己会卡死&#xff0c;请把代码&#xff…

阿里云500服务器内部错误,腾讯云服务器网站不能打开 提示内部错误http 500

满意答案2010qqww2015.11.14采纳率&#xff1a;55% 等级&#xff1a;9已帮助&#xff1a;13114人实服务器内部500错误大概可分为两种&#xff0c;一种是服务器本身权限问题&#xff0c;另一种是程序上不规范或者错误造成。所以要解决此问题需要先弄清楚其到底是哪种原因&…

Hadoop(四)C#操作Hbase

HbaseHbase是一种NoSql模式的数据库&#xff0c;采用了列式存储。而采用了列存储天然具备以下优势&#xff1a;可只查涉及的列&#xff0c;且列可作为索引&#xff0c;相对高效针对某一列的聚合及其方便同一列的数据类型一致&#xff0c;方便压缩同时由于列式存储将不同列分开存…

【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”

本系列博文几乎没有难啃的“专业术语”&#xff0c;尽量让读者能够看明白文章所述内容&#xff0c;是本系列博文的核心宗旨之一。&#xff08;由于本人也是由于项目需要&#xff0c;所以才来查阅相关资料&#xff0c;文中出现的错误欢迎指出&#xff0c;共同进步&#xff01;谢…

一行命令 优化上传速度

本文来自 fir.im 首席吉祥物 TraWor. 最近许多用户反映上传速度慢的一塌糊涂&#xff0c;七牛的上传带宽我想肯定是没问题的&#xff0c;那原因不必多想就剩下 DNS 了。 即便本地网络再快&#xff0c;DNS 服务器给了一个很远的服务器地址也没办法很快的上传。 在终端运行这一行…

go 服务器 源码,LollipopGo开源游戏服务器框架--global服务器源码

大家好&#xff0c;我是彬哥&#xff0c;本节给大家讲下LollipopGov1.0.20190102版本游戏服务器globla服务器&#xff0c;抛砖引玉了&#xff0c;主要是针对Go语言游戏服务器Global服务器处理。package mainimport ("LollipopGo/LollipopGo/conf""LollipopGo/Lo…

ArcGIS导入Sketchup模型

ArcGIS可以与Sketchup、3D Studio Max等三维软件完美进行交互。 ArcGIS可以借助 Import 3D Files 工具支持主流的三维模型导入。支持 3D Studio Max (*.3ds)、VRML and GeoVRML 2.0 (*.wrl)、SketchUp 6.0 (*.skp)、OpenFlight 15.8 (*.flt)、Collaborative Design Activity (C…

剑指offer之两个队列实现栈的问题

1 问题 两个队列实现栈的插入和获取头部元素的功能 2 分析 1&#xff09;获取头部元素的功能分析&#xff1a; 我们有2个队列&#xff0c;我们知道队列的特点的先进先出&#xff0c;而栈的特点是先进后出&#xff0c;比如我们有数据1,2,3,4,我们分别依次压入队列1&#xff0…

solr的空间查询(查询地图周围坐标)

原文网址&#xff1a;http://www.cnblogs.com/hanhuibing/articles/5680616.html 基于Solr的空间搜索 如果需要对带经纬度的数据进行检索&#xff0c;比如查找当前所在位置附近1000米的酒店&#xff0c;一种简单的方法就是&#xff1a;获取数据库中的所有酒店数据&#xff0c;…

「零门槛多语言 Python/C/C# 通用思想学习系列」第一篇:经典HelloWorld

环境说明 操作系统&#xff1a;Windows7 SP1 编辑器说明&#xff1a; Python&#xff1a;notepadC&#xff1a;devcC sharp&#xff08;C#&#xff09;&#xff1a;Visual Studio2019 注意&#xff1a; 标点&#xff1a;在编程中要使用英文的标点符号&#xff0c;必须切记数…

服务器2008 系统日志 提示打印机,介绍服务器日志出现打印机错误的解决方法

今天来聊聊一篇关于服务器日志出现打印机错误的解决方法的文章,现在就为大家来简单介绍下服务器日志出现打印机错误的解决方法,希望对各位小伙伴们有所帮助。windows2003日志提示&#xff0c;打印机 ****未知。登录之前&#xff0c;请与管理员联系&#xff0c;安装驱动程序。事…

js 错误/异常处理

为什么80%的码农都做不了架构师&#xff1f;>>> /*** 自定义错误处理*/ onerror handleError; function handleError(desc,page,line){alert("desc:"desc"\n""page:"page"\n""line:"line); } var s null; s.t…

多面体 (Multipatch)

多面体要素是一种可存储面集合的 GIS 对象,能够在数据库中将 3D 对象的边界表示为单个行。面可存储表示要素组成部分的纹理、颜色、透明度和几何信息。面中存储的几何信息可以是三角形、三角扇、三角条带或环,如下所示。 所有多面体都将…

Python turtle库实现基本剖析

有关turtle的相关使用请参考《python图形绘制库turtle中文开发文档及示例大全》 本篇文为turtle库的实现剖析&#xff0c;但不涉及 python 的 TK库。 开始 入口探寻 在turtle中&#xff0c;直走是使用 forward 或者 fd 函数&#xff1b;在本机安装好了 turtle 库后&#xf…

分享我做Dotnet9博客网站时积累的一些资料

从2019年使用WordPress搭建Dotnet9网站&#xff0c;到现在手撸代码开发&#xff0c;介绍中间使用的一些资源&#xff0c;绝无保留&#xff0c;希望对大家有用。1. 申请域名、搭建WordPress网站时间点&#xff1a;2019年11月申请Dotnet9域名&#xff0c;讲个实话&#xff0c;站长…

基于Azure Blob冷存储的数据压缩备份总结

基于上一篇的压缩算法对比分析报告&#xff0c;选择了LZ4算法的普通模式&#xff0c;其测试压缩率为28%&#xff0c;20G压缩时间为256s&#xff0c;估计1T的冷备时间为3.5h。 接下来&#xff0c;将23T的HBase历史数据进行了压缩冷备&#xff0c;压缩后大小为3.5T&#xff0c;冷…

Ubuntu使用VNC运行基于Docker的桌面系统

2019独角兽企业重金招聘Python工程师标准>>> docker-ubuntu-vnc-desktop From Docker Index docker pull dorowu/ubuntu-desktop-lxde-vnc Build yourself git clone https://github.com/fcwu/docker-ubuntu-vnc-desktop.git docker build --rm -t dorowu/ubuntu-de…

【ArcGIS风暴】ArcGIS个人数据库(.mdb)中矢量字段(如Shape_Length、Shape_Area)无法删除的解决办法

ArcGIS中,某些操作,比如空间连接(Spatial Join)结果属性表中会自动产生Shape_Length和Shape_Area字段,这些字段无法删除,如下: 即使在工具箱中的【删除字段】工具,也找不到这些字段,如图所示,给我们的数据入库工作带来了一定的困扰。 解决思路: mdb是个人数据库,基…