通过一个最简单的程序入门Windows编程

article/2025/10/29 16:55:18

一、最简单的程序

我们首先先一个最简单的Windows程序,功能是显示一个消息框,随便提示一些文字就可以了。
看一下代码:

#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) 
{MessageBox(NULL,TEXT("随便提示一些内容就可以了!哈哈哈!"),		//内容TEXT("这里是标题!"),		//标题名称0);return 0;
}

我们再看一下效果:
在这里插入图片描述
接下来我们从头开始剖析这个简单的小程序。

二、分析一下

① 头文件

#include <Windows.h>

开头的是在几乎所有用C语言编写的程序中都有的预处理器(preprocessor)指令:#include<windows.h>
windows.h是一个最重要的包含文件,它囊括了若干其他Windows头文件,其中的某些头文件又包含另外的一些头文件。

下列几个是最重要也是最基本的头文件:

  • WINDEF.H 基本数据类型定义。
  • WINNT.H 支持 Unicode的类型定义。
  • WINBASE.H 内核函数。
  • WINUSER.H 用户界面函数。
  • WINGDI.H 图形设备接口函数。

这些头文件定义了Windows的所有数据类型、函数调用、数据结构以及常量标识符。

② 程序入口

main是C程序的入口,而Windows程序的入口是WinMain,它总是这个样子的:

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) 

我们看一下winbase.h中的声明:

int
WINAPI
WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd);

我们可以看到是有一些区别的。 第三个参数在WINBASE.H中定义为LPSTR,而我们却把它改成了PSTR. 这两种数据类型在WINNT.H中都声明为指向字符串的指针。前缀LP代表长指针(Long Pointer),它是16位Windows的产物。另外就是我们改动的WinMain声明中的两个参数名。

WinMain函数的返回值被定义为int
WINAPI标识符在WINDEF.H中定义,它规定了一种函数调用约定。而我们绝大多数Windows函数调用都定义成WiNAPI。

我们再来研究一下它的参数部分:

HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd

第一个参数一般叫做“实例句柄”(Instance Handle)。在Windows程序中,句柄无非就是一个数值,程序里用它来标识某些东西。比如在我们这个例子里,这个句柄就唯一标识了 我们的这个程序。
实际上在某些Windows程序中,把句柄当作调用参数是必须的。比如在早期的Windows版本中,当多路并发运行同一个程序时,就需要为那个程序创建多个实例。同一程序的所有的实例都共享代码和只读存储。一个程序可以通过查看hPrevInstance,也就是第二个参数从而知道是否有它的其他实例正在运行。它也就可以因此跳过某些零散杂务步骤,把一些数据从前一个实例搬到自己的数据区来。但是在32位Windows 中,这一概念已不再采用。 因此WinMain的第二个参数通常总是NULL(定义为0)。
WinMain的第三个参数是用来运行程序的命令行(Command Line)。有些Windows程序
在启动时用它来把文件装入内存。
WinMain的第四个参数用来指明程序最初如何显示或正常显示,或最大化到全屏,或最小化显示在任务栏上。

③ MessageBox函数

最后我们看一下最主要的MessageBox函数。
MessageBox函数是用来显示短信息的。尽管形式比较单一,MessageBox所显示的小
小窗口实际上也是一个对话框。

我们也研究一下它的几个参数:
MessageBox的第一个参数通常是一个窗口句柄。我们先不管它。
第二个参数就是将要在信息框里出现的文本字符串。
第三个参数是将要在标题栏上显示的文本字符串。
而且在这个程序中,我们把所有的字符串都打包到TEXT宏代码里面,就是用TEST("XXX")把它包裹起来。一般来说,并不需要把所有的字符串都打包到TEXT宏代码里面,之所以这样做是因为这样在把程序转换成Unicode时会方便很多。
MessageBox的第四个参数是以前缀MB_打头的一些常量的组合。WINUSER.H中定义了这些相关常量。比如下面的这些,你可以任选一个来表示在对话框里希望用哪种按钮:

#define MB_OK					0X00000000L		//ok
#define MB_OKCANCEL				0x00000001L		//ok和取消
#define MB_ABORTRETRYIGNORE		0x00000002L		//中止、重试和取消
#define MB_YESNOCANCEL			0x00000003L		//yes/no/取消
#define MB_YESNO				0X00000004L		//yes和no
#define MB_RETRYCANCEL			0x00000005L		//重试和取消

当你把第四个参数选成0时,那就只显示0K按钮。我们还可以用OR(|)运算符把一个上述按钮常量跟一些其他的常量组合起来。
比如下面的来描述哪个按钮为默认按钮:

#define MB_DEFBUTTON1	0x00000000L		
#define MB_DEFBUTTON2	0x00000100L		
#define MB_DEFBUTTON3	0x00000200L	
#define MB_DEFBUTTON4	0x00000300L		

你还可以用下列某个常量来指定消息框中所显示的图标:

#define MB_ICONHAND				0x00000010L		//错误
#define MB_ICONQUESTION			0x00000020L		//疑问
#define MB_ICONEXCLAMATION		0x00000030L		//警告
#define MB_ICONASTERISK			0x00000040L		//感叹号

这些图标当中,有些还另有别名:

#define MB_ICONWARNING		MB_ICONEXCLAMATION
#define MB_ICONERROR		MB_ICONHAND
#define MB_ICONINFORMATION	MB_ICONASTERISK
#define MB_ICONST0P			MB_ICONHAND

我们可以尝试一下:
第一个:

MessageBox(NULL,TEXT("随便提示一些内容就可以了!哈哈哈!"),		//内容TEXT("这里是标题!"),		//标题名称MB_YESNOCANCEL | MB_DEFBUTTON2 | MB_ICONQUESTION);
return 0;

效果:
在这里插入图片描述
第二个:

MessageBox(NULL,TEXT("随便提示一些内容就可以了!哈哈哈!"),		//内容TEXT("这里是标题!"),		//标题名称MB_RETRYCANCEL | MB_DEFBUTTON3 | MB_ICONHAND);
return 0;

效果:
在这里插入图片描述

三、总结

相信通过这个简单的例子和讲解,你已经对Windows编程有了一个初步的大体的印象。虽然系统提供了众多的选项,但是我们可能还是觉得不太够,如我们暂时不知道怎么调整窗口的大小,颜色等等。我们后面就会学习怎么样随意的格式化我们的MessageBox,使我们的Windows程序变得丰富多彩。


http://chatgpt.dhexx.cn/article/Gdy3Jw9b.shtml

相关文章

windows编程 线程局部存储(TLS)详解

文章目录 一、基本概念二、基本使用三、例子分析&#xff1a; 总结 一、基本概念 线程局部存储&#xff08;TLS&#xff09;&#xff0c;是一种变量的存储方法&#xff0c;这个变量在它所在的线程内是全局可访问的&#xff0c;但是不能被其他线程访问到&#xff0c;这样就保持…

windows编程入门

记录一下windows编程编写一个消息框&#xff0c;算是学习windows编程的入门级程序吧 以下代码来自&#xff1a;《windows游戏编程大师技巧&#xff08;第二版&#xff09;》 #include<Windows.h> #include<windowsx.h> #include<string> #include<sstre…

Windows编程捕获特定窗口及键盘鼠标消息模拟

Windows编程捕获特定窗口及键盘鼠标消息模拟 一、简介二、使用到的API简介三、获取Windows记事本的编辑区窗口的句柄并模拟输入操作1、分析2、代码一3、代码二 四、后记 一、简介 窗口是Windows的核心组件&#xff0c;Windoows下的绝大部分应用都是利用Windows提供的原生窗口&…

【Windows编程】实时捕捉屏幕

实时捕捉屏幕 主要分为三个部分 获取屏幕 // 两个函数都可以进行位图复制&#xff0c;不过StretchBlt可以按照位图进行拉伸或者压缩 BitBlt(HDC hdc,int x,int y,int cx,int cy,HDC hdcSrc,int x1,int y1,DWORD rop); 或者 StretchBlt(HDC hdcDest,int xDest,int yDest,int …

Windows编程初步(一)

第一节:安装帮助文档 使用C语言进行Windows开发,必然使用到WindowsSDK。Windows SDK指Windows开发人员工具包,是为使用C语言开发Windows程序所提供的工具集。里面提供的工具异常全面丰富,很少有人能全部了解,在开发Windows应用程序时,应同时使用MSDN,即俗称Windows开发…

Windows编程

Windows编程基础 Windows系统级开发&#xff0c;简称Win32 应用程序分类 在Windows这个操作系统平台上&#xff0c;共有三类应用程序控制台程序Console Dos程序&#xff0c;本身没有窗口&#xff0c;通过Windows DOS窗口执行 窗口程序 拥有自己的窗口&#xff0c;可以与用户…

【Windows编程】windows窗口创建过程详解

文章目录 前言1 应用程序的分类2 应用程序分类的对比3 编译工具4 windows库文件和头文件5 WinMain函数和MessageBox函数初始6 窗口类7 窗口类的分类8 注册窗口类函数9 注册窗口类的结构体10 注册全局和局部窗口类11 创建窗口的函数12 创建一个windows的过程步骤13 创建一个子窗…

windows系统编程1——线程和进程

学习视频链接 03进程的创建_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Fd4y1G7Td?p3&vd_source0471cde1c644648fafd07b54e303c905 目录 一、创建线程 二、线程间同步 2.1 线程不同步的结果 2.2 原子操作上锁 2.3 临界区 2.4 内核对象 三、线程间通信…

day01 windows编程入门

文章目录 window编程基本概念Windows常见的数据类型字符串的处理 第一个windows程序的编写 window编程基本概念 Windows编程的本质就是使用好操作系统&#xff0c;想要用好操作系统必不可少的秘籍----MSDN。 Windows编程主要分为两种&#xff1a; 1、控制台编程(CUI) 2、图形界…

10行代码带你入门Windows编程

Windows编程——Hello World 开发工具效果展示源代码主函数主函数参数HINSTANCEhInstanccehPreInstanceLPSTRlpCmdLinenCmdShowMessageBox 小知识 开发工具 Visual Studio 2013 效果展示 源代码 #include <Windows.h> //头文件//主函数 int WINAPI WinMain(HINSTANC…

使用VS Code进行Qt开发

使用VS Code进行Qt开发 文章目录 使用VS Code进行Qt开发测试环境步骤1. 将Qt的bin目录添加到环境变量2. 安装VS Code扩展3. 使用Qt Creator创建CMake项目4. 在VS Code中打开项目5. 构建并运行项目7. 调试项目 一些小问题 Qt Creator界面不美观&#xff0c;而VS Code更漂亮一些。…

Qt开发CAN通信的环境配置

Qt开发CAN通信的环境配置 目录 1 开发环境 1 1.1 编程环境 1 1.2 工程设置 1 1.3 调试窗口设置 2 1.4 依赖库 2 1.5 源代码的适配 3 2 运行及硬件环境 3 2.1 CAN设备 3 2.4 运行支持文件 3 3 故障解决 4 3.1 转到槽函数失败 4 1 开发环境 1.1 编程环境 工程采用Windows系统下的…

Qt开发必备技术栈学习路线和资料

简介 本文为&#xff1a;C QT 学习路线大纲资料&#xff08;文章底部&#xff09; Qt 可以做什么&#xff1f; Qt 虽然经常被当做一个 GUI 库&#xff0c;用来开发图形界面应用程序&#xff0c;但这并不是 Qt 的全部&#xff1b;Qt 除了可以绘制漂亮的界面&#xff08;包括控…

WIndows下搭建Qt开发环境 -- Qt 、Qt Creater 安装、配置

[本文发布于https://blog.csdn.net/Stack_/article/details/122491885&#xff0c;未经许可不得转载&#xff0c;转载须注明出处] 一、需要下载安装哪些文件 1Qt SDK&#xff0c;即Qt官方提供的API2编辑器、UI设计器 – Qt Creater3编译器 其中Qt Creater是可以被Visual Studi…

Qt开发MQTT(一) 之Qt官方Qt MQTT

概述 Qt开发MQTT程序有两种方式&#xff0c;一个是Qt官方提供的基于MQTT的封装&#xff0c;一个是第三方&#xff08;EMQ&#xff09;开发的用于Qt调用MQTT的接口&#xff0c;二者使用方法大同小异&#xff0c;并且均提供了源码。那么&#xff0c;这里先来介绍第一种&#xff…

Qt开发之Rust篇(一)

本文运行环境&#xff1a; 操作系统&#xff1a;Windows 11 专业版Visual Studio版本&#xff1a;Visual Studio 2022 PreviewQt版本&#xff1a;Qt 5.14.2 1、安装C编译器 除了 Rust 自己的构建工具之外&#xff0c;您还需要设置 C 编译器、Qt 和 CMake。 在 Windows 上&am…

【Qt】ubuntu下Qt开发环境的搭建

下载对应版本的Qt开发环境 Qt官网下载地址&#xff1a;https://download.qt.io 国内镜像下载地址&#xff1a;https://mirrors.cloud.tencent.com/qt/ 。建议用镜像下载速度快。集成安装包在 official_releases/qt 目录下&#xff0c;新地址&#xff1a;https://download.q…

QT开发环境简介、安装以及搭建VS2019环境

文章目录 1、QT简介2、 QT的安装1、下载QT安装包2、安装QT1、安装qt creator2、设置qt账号3、选择安装路径4、选择组件5、同意许可协议&#xff0c;下一步6、菜单快捷方式7、点击安装&#xff0c;等待安装完成8、安装完成 3、qt creator创建工程1、打开软件2、新建项目3、选择Q…

Qt开发框架介绍

Qt: 基于C++跨平台的软件开发框架 Languages: C++, Python, Qt QML, Javascript Qt支持的平台有:Windows, Linux, macOS Qt Quick技术: 描述性UI设计语言(QML)作为前端, C++作为后端. 适用于基于触摸操作的界面的开发, 轻松实现优美、现代的界面. 默认使用GPU进行图形渲染.…

用QT开发安卓应用

QT官网参考链接 https://doc.qt.io/qt-5/android.html 这里的指示是QT5的&#xff0c;和QT6有点不同。 安装QT 下载地址QT6&#xff1a;http://download.qt.io/archive/qt/6.0/6.0.0/single/ 安装后&#xff0c;会多出一个Qt文件夹&#xff0c;里边包含了Qt Creator.app和…