C++在VS2022开发Windows窗口程序1:第一个win窗口程序

news2024/11/17 20:27:08

Windows操作系统是由微软公司开发和维护的一系列图形化操作系统的统称。Windows操作系统主要用于个人计算机、笔记本电脑、平板电脑、服务器等设备上。Windows起源于Microsoft-DOS模拟环境,相比于DOS的指令化模式,Windows采用图形化的模式,因此更加的人性化。

Windows的程序主要分为控制台应用程序和GUI应用程序。控制台应用程序通常用于执行简单的命令行任务或系统管理,而GUI应用程序则用于提供更复杂的用户界面和功能,两种程序最显著的区别就是入口函数不同,控制台的入口函数是main函数,而WindowsGUI的入口函数是WinMain函数。本专栏主要以Windows的GUI应用程序为主

开发环境:VS2022、Win11系统。

首先打开VS2022,然后创建一个Windows桌面应用程序。

值得注意的是,VS2022还有一个默认的"Windows桌面向导"项目模板,使用Windows桌面向导项目,我们可以选择不同的桌面应用程序框架(如WPF、Windows Forms等),并提供了一些默认的设置和布局,以帮助我们快速搭建应用程序的基本结构。通过这个项目模板,就可以专注于应用程序的功能和界面设计,而无需从头开始搭建整个项目架构。

第一个项目的初始文件如下图所示:

运行代码如下。

这是VS2022自带的WindowsGUI程序的默认模板,我们暂时先不管它。

把这些默认文件删除掉,然后创建一个新的.cpp文件。

#include<Windows.h>
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR IpCmdLine, int nCmdSHow)
{
	MessageBox(NULL, TEXT("Hello World"), TEXT("my first windows application"), MB_OK);
	return 0;
}

 将上述代码复制到CPP文件中,然后运行代码。

一个简单的WindowsGUI程序就做好了,由于VS2022十分适合开发Windows程序,所以我们用VS2022进行编程非常低舒服,不用配置任何复杂的环境,就可以直接运行。

Windows.h头文件包含了Windows API的头文件,提供了Windows应用程序开发所需要的函数和数据类型的定义。

Windows.h

WinMain函数,是WindowsGUI程序的入口函数,相当于控制台程序里面的main函数,WinMain函数的主要作用是初始化应用程序,显示主窗口,并进入一个消息接收--------发送的循环,这个循环是应用程序执行的其余部分的顶级控制结构。

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR IpCmdLine, int nCmdSHow)

WinMain的函数声明如下:

int CALLBACK WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow
);

- `hInstance`:当前实例的句柄。

- `hPrevInstance`:在32位Windows系统中已经废弃,始终为NULL。

- `lpCmdLine`:指向应用程序的命令行参数的指针。

- `nCmdShow`:初始窗口显示的方式,如最大化、最小化、正常等。

MessageBox函数,用于创建和显示一个消息框,其实用法就类似于大家刚学C语言时候用的printf函数,用于输出信息。

MessageBox(NULL, TEXT("Hello World"), TEXT("my first windows application"), MB_OK);

声明如下:

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

- `hWnd`:消息框的父窗口句柄。如果为 `NULL`,消息框将显示在屏幕中央。

- `lpText`:要在消息框中显示的消息文本,通常是一个字符串。

- `lpCaption`:消息框的标题文本,将显示在消息框的标题栏中。

- `uType`:消息框的样式,指定了消息框的按钮组合、图标类型、默认按钮等属性。MB_OK就是一个OK按钮。

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

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

相关文章

微信小程序 引入MiniProgram Design失败

这tm MiniProgramDesign 是我用过最垃圾的框架没有之一 我按照官网的指示安装居然能安装不成功,牛! 这里说明我是用js开发的 到以上步骤没有报错什么都没有,然后在引入组件的时候报错 Component is not found in path “./miniprogram _npm/vant/weapp/button/index” (using…

SAPUI5基础知识9 - JSON Module与数据绑定

1. 背景 在前面的博客中&#xff0c;我们已经学习了SAPUI5中视图和控制器的使用&#xff0c;在本篇博客中&#xff0c;让我们学习下MVC架构中的M-模型了。 SAPUI5中的JSON Model是一个客户端模型&#xff0c;可以用于在SAPUI5应用程序中处理和操作JSON数据。SAPUI5提供了绑定…

prometheus+grafana搭建监控系统

1.prometheus服务端安装 1.1下载包 使用wget下载 &#xff08;也可以直接去官网下载包Download | Prometheus&#xff09; wget https://github.com/prometheus/prometheus/releases/download/v2.44.0/prometheus-2.44.0.linux-amd64.tar.gz1.2解压 tar xf prometheus-2.44…

Flutter ffi Failed to lookup symbol

iOS release版本&#xff0c;解决方式参考官方文档&#xff1a;在 iOS 中使用 dart:ffi 调用本地代码 如果debug版本也报这个错误&#xff0c;很可能是有多个.c文件&#xff0c;编译的时候没带上&#xff01; 假设你的ffi模块名字是 c_lib 对于Android端&#xff0c;需要修改…

03-Shell编程之循环语句与函数

目录 3.1 for循环语句 3.1.1for语句的结构 3.1.2 for语句应用实例 3.2 使用whlie循环语句 1.打印数字1到5 3.3 使用until循环语句 3.3.1until的实例 1.打印数字1到5&#xff08;使用until的逆向逻辑&#xff09; 2.等待用户输入特定内容 3.4 函数 3.4.1Shell函数的基…

你还在手动操作仓库?这款 CLI 工具让你效率飙升300%!

前言 作为一名开发者&#xff0c;我经常会在 GitHub 和 Gitee 上 fork 各种项目。时间一长&#xff0c;这些仓库就会堆积如山&#xff0c;变成了“垃圾仓库”。每次打开代码托管平台&#xff0c;看到那些不再需要的仓库&#xff0c;我的强迫症就会发作。手动一个一个删除这些仓…

仿微信图片查看器`WPF`实现`ListBox` 鼠标滑动批量选中与反选效果

看到微信中&#xff0c;上传图片时的图片查看功能可以通过手指长按并滑动实现多选&#xff0c;于是为解析实现思路&#xff0c;也通过WPF 使用ListBox 实现了一版案例。 参考效果 微信效果如下&#xff0c;支持图片单选和鼠标长按滑动实现批量操作。 WPF模仿效果&#xff1a…

【代码仓库提交大文件,用Git LFS!】

开始前 Git LFS&#xff1a;请注意&#xff0c;你的远程仓库需要支持Git LFS。GitHub、GitLab和Bitbucket都支持Git LFS&#xff0c;但可能需要额外的配置或开启特定的支持选项。 介绍 Git LFS (Large File Storage) 是一个 Git 扩展&#xff0c;用于处理和存储大文件。通常…

【ai】tx2 nx: jetson Triton Inference Server 运行YOLOv4

【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 部署了服务端。需要对其测试【ai】tx2-nx 查看 jetpack 版本信息及对应的tritonserver【ai】tx2-nx:配置tritonserver2.17.0-jetpack4.6 环境并运行例子C++ Triton YoloV4 client 是基于 r21.05的 服务端的tensort 的…

离散数学-再次复习

1.先找到e&#xff0c;这里是0 2.对每个元素求它的阶 3.根据拉格朗日定理&#xff0c;子群的阶必须是群 G 的阶的因数。群 G 的阶为 10&#xff0c;它的因数有 1、2、5 和 10。这意味着子群的阶可能是 1、2、5 或者 10。 4.相同阶的就放为一组&#xff0c;也就是它的一个子群…

Java面试复习思路

Java面试复习思路路线一&#xff1a; 准备Java面试时&#xff0c;可以从以下几个方面着手&#xff0c;以确保你能够自信且全面地展示你的技能和知识&#xff1a; 基础与核心概念&#xff1a; 确保你对Java基础有深入理解&#xff0c;包括但不限于&#xff1a;面向对象编程原则…

自从用了这个 69k star 的项目,前端小姐姐再也不催我了

一般在开发前后端分离的项目时&#xff0c;双方会定义好前后端交互的 http 接口&#xff0c;根据接口文档各自进行开发。这样并行开发互不耽误&#xff0c;开发好后做个联调就可以提测了。 不过最近也不知道怎么回事&#xff0c;公司新来的前端小姐姐总是在刚开始开发的时候就…

项目中eventbus和rabbitmq配置后,不起作用

如下&#xff1a;配置了baseService层和SupplyDemand层得RabbitMQ和EventBus 但是在执行订阅事件时&#xff0c;发送得消息在base项目中没有执行&#xff0c;后来发现是虚拟机使用得不是一个&#xff0c;即上图中得EventBus下得VirtualHost&#xff0c;修改成一直就可以了

Java-内部类成员内部类

类的五大成员 属性 方法 构造方法 代码块 内部类 什么是内部类&#xff1f; 在一个类的里面&#xff0c;再定义一个类。 举例&#xff1a;在A类的内部定义B类&#xff0c;B类就被称为内部类 内部类表示的事物是外部类的一部分 内部类单独出现没有任何意义 内部类的访问特点 1.…

lsopsed 安装与工程创建

Xposed与lsposed异同点 Xposed支持到安卓7.1 Xposed会将激活的模块注入到每个进程&#xff0c;需要自已在模块内根据包名过滤 Xposed激活模块后重启系统生效 lsposed支持安卓8.1-14 1sposed激活模块后需要勾选要作用于哪些app lsposed激活模块后重启对应app生效 lsposed模块…

Redis(超详细)

Redis Redis概念&#xff1a; Redis是开源的&#xff0c;遵循BSD的&#xff0c;基于内存数据存储&#xff0c;被用于作为数据库、缓存机制、消息中间件&#xff1b; Redis的特点&#xff1a; 1.高性能key/valu内存xing数据库&#xff1b; 2.支持丰富的数据类型 3.支持持久化&am…

Information security in DLMS/COSEM(Green-Book)—认证机制

Information security in DLMS/COSEM 9.2.1 概述9.2.2 DLMS/COSEM安全概念9.2.2.1 概述 9.2.2.1 概述9.2.2.2 身份识别和认证9.2.2.2.1 身份识别9.2.2.2.2 认证机制9.2.2.2.2.1 概述 无安全认证&#xff08;Lowest Level Security&#xff09;&#xff1a;低级别安全认证&#…

python中数据的作用域

一、命名空间 在 Python 中&#xff0c;命名空间是一个系统&#xff0c;它用于确保名字的唯一性&#xff0c;并防止命名冲突。命名空间是一个存储变量名称&#xff08;或者更广泛地说&#xff0c;标识符&#xff09;与对象之间映射的抽象概念。每个变量名你在程序中创建&#x…

Redis-数据类型-zset

文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db4数据库4、将一个或多个member元素及其score值加入到有序集key当中5、升序返回有序集key6、升序返回有序集key&#xff0c;让分数一起和值返回的结果集7、降序返回有序集key&#xff0c;让分数一起和值返回到结…

Android上编译和使用curl

1 概述 Android系统编译的时候默认是没有带curl工具的&#xff0c;但是在aosp源码中&#xff0c;却是有curl的源码包含。所以只需要编译curl&#xff0c;然后将其push到Android设备中&#xff0c;就可以使用curl命令了。 2 编译curl 这里编译curl是在整机代码环境下进行编译…