【C语言/C++编程学习笔记】你的第一个Windows程序!高级操作~
什么是windows编程?了解到Windows API 编程、Windows编程、Windows SDK 编程是一个概念。今天我们运用C语言来实现你的第一个真正的Windows程序。
windows.h 头文件介绍:
编写Windows程序,首先要包含 windows.h 头文件。windows.h 还包含了其他一些Windows头文件,例如:
● windef.h:基本类型定义
● winbase.h:内核函数
● wingdi.h:用户接口函数
● winuser.h: 图形设备接口函数
这些头文件定义了Windows的所有数据类型、函数原型、数据结构和符号常量,也就是说,所有的Windows API都在这些头文件中声明。
在C语言中,程序都是“黑屏”的,称为控制台程序(Console Application)。这套教程要讲的是带界面的Windows程序(Windows Application),也称为GUI程序(GUI Application)。
控制台程序以 main() 为入口函数,Windows程序以 WinMain() 为入口函数,动态链接库(DLL)以 DllMain() 为入口函数,不同的入口函数决定了不同类型的程序。
WinMain() 函数的原型为:
int WINAPI WinMain( HINSTANCE hInstance, // 当前窗口句柄 HINSTANCE hPrevInstance, // 前一个窗口句柄,Win32下为NULL(Win16留下的废物,目前已弃用) LPSTR lpCmdLine, // 命令行参数 int nCmdShow // 窗口显示方式 );
先不要急于理解这些参数的含义,我先给大家写一个简单的不带黑屏的、真正的Windows程序:
#include int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ // 调用API 函数MessageBox int nSelect = MessageBox(NULL, TEXT(""), TEXT(), MB_OKCANCEL); if(nSelect == IDOK){ MessageBox(NULL, TEXT("你点击了“确定”按钮"), TEXT("提示"), MB_OK); }else { MessageBox(NULL, TEXT("你点击了“取消”按钮"), TEXT("提示"), MB_OK); } return 0; }
运行结果:

点击“确定”或“取消”按钮,又会弹出一个新的提示框。大家可以亲自运行一下,会有真实的体验。
原来没有main()函数,没有#include 的C语言程序也是可以运行的!
MessageBox() 函数是众多API中的一个,用于弹出一个指定风格的对话框,其原型为:
int WINAPI MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );
WINAPI 为宏定义
#define WINAPI __stdcall,表示函数调用方式,暂时可以不理会,不影响代码编写,只需要知道MessageBox()返回值为 int,表示按下的按钮。
参数说明 :
hWnd:该消息框的父窗口句柄,如果此参数为NULL,则该消息框没有拥有父窗口。大家不用急于理解这个参数,后续会详细讲解。
lpText:消息框的内容。LPCTSTR 是自定义数据类型,等价于 const char *。
lpCaption:消息框的标题。
uType:对话框的按钮样式和图标。
uType 支持的按钮样式:

这些按钮都是宏定义 :
#define MB_OK 0x00000000L #define MB_OKCANCEL 0x00000001L #define MB_ABORTRETRYIGNORE 0x00000002L #define MB_YESNOCANCEL 0x00000003L #define MB_YESNO 0x00000004L #define MB_RETRYCANCEL 0x00000005L
你也可以尝试用数字来表示按钮,例如:
MessageBox(NULL, TEXT("你好,世界!");
也会生成与上面相同的对话框。
除了按钮,uType 还支持图标(图标对用户有提醒作用):

这些图标也都是宏定义:
#define MB_ICONHAND 0x00000010L #define MB_ICONQUESTION 0x00000020L #define MB_ICONEXCLAMATION 0x00000030L #define MB_ICONASTERISK 0x00000040L
如果希望同时定义按钮和图标的样式,可以使用或运算|,例如:
MessageBox( NULL, TEXT(!"), TEXT(""), MB_OKCANCEL | MB_ICONINFORMATION );
把上面的MessageBox换成这个就ok了。运行结果 :
与上面的对话框相比,多出了一个图标,同时还能听到提示音。是不是多了一个提示符号在文字的前面啊。
再看来一下MessageBox() 的返回值。
MessageBox() 返回被按下的按钮,以数字表示,这些数字都被定义成了宏,如下所示:

对应的宏定义为:
#define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 6 #define IDNO 7

总结:
对于刚刚学完C语言的,学windows编程的,这些都是满满的干货。
一定要记住喔,从你学windows编程开始,你就已经告别了难看的windows do界面,只要一步一步走,写一个漂亮的window程序不在话下。这些都是以后学习必须掌握的,先收藏吧!
自学C/C++不易,此路应携手前行。
可关注我的编程公众號【草莓味狸猫】
如果你想跟着小编一起学编程的话!
可以来我的C语言C++编程学习圣地,
#define IDOK 1 #define IDCANCEL 2 #define IDABORT 3 #define IDRETRY 4 #define IDIGNORE 5 #define IDYES 6 #define IDNO 7
!
还有(源码,零基础教程,项目实战教学视频)!


【C语言/C++编程学习笔记】你的第一个Windows程序!高级操作~的更多相关文章
- 【C语言C++编程学习笔记】一种很酷的 C 语言技巧,灵活运用编程技巧让你写代码事半功倍!
C语言常常让人觉得它所能表达的东西非常有限.它不具有类似第一级函数和模式匹配这样的高级功能.但是C非常简单,并且仍然有一些非常有用的语法技巧和功能,只是没有多少人知道罢了. ☆ 指定的初始化 很多人都 ...
- 【C语言/C++编程学习笔记】:通俗易懂讲解 - 链表!学不会?不存在的!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 【C语言C++编程学习笔记】基础语法,第一个简单的实例编程入门教程!
C语言/C++编程学习:一个简单的实例 让我们来看一个简单的C语言程序.从下面的程序可以看出编写C语言程序的一些基本特征. 如果你能知道该程序将会在显示器上显示一些内容,那说明你还是知道一些的! ...
- Android学习笔记一之第一个Android程序
/** *Title:总结昨天下午至今天上午的学习成果 *Author:zsg *Date:2017-8-13 / 一.了解Android 1.Android架构 Android大致可分为四层架构:L ...
- Django学习笔记(一):第一个django程序
1.创建和运行 django-admin startproject xxx python manage.py runserver 2.第一个项目程序 wsgi.py中文名:python服务器网关接口. ...
- Python学习笔记一:第一个Python程序,变量,字符编码与二进制,用户交互程序
第一个python程序 Windows:设置环境变量,X:\pthonxxx,xxx是版本号 在命令提示符下 输入python,进入解释器 >>>print(“Hello World ...
- 学习笔记--我的第一个Java程序
我的第一个Java程序 // pubilc 表示公开的 // class 表示定义一个类 // HelloWorld 表示一个类名 public class HelloWorld { // 表示定义一 ...
- 【编程学习笔记】如何组织构建多文件 C 语言程序!编程也有~
优秀 Unix 程序哲学 首先,你要知道这个 C 程序是一个 Unix 命令行工具.这意味着它运行在(或者可被移植到)那些提供 Unix C 运行环境的操作系统中.当贝尔实验室发明 Unix 后,它从 ...
- 【C语言编程学习笔记】利用462字节代码实现雅虎logo ACSII 动画!
ACSII 动画演示: 不过本文介绍的是另一个作品:c 代码实现雅虎 logo ACSII 动图. 运行后,你将会看到: 它是一个 20fps.抗锯齿的 Yahoo! logo ASCII 动 ...
随机推荐
- js拖拽原理及简单实现(渣渣自学)
第一步 首先简单分析下需求吧,我们就是想实现鼠标拖拽带颜色的方块时,让方块停留在鼠标松开的位置,需要计算的就是拖拽前的坐标和拖拽后的坐标,鼠标移动后相对于原位置的偏移量=目标元素的偏移量,根据这个等式 ...
- 2020重新出发,JAVA高级,JVM
JVM的基本概念 JVM是可运行java代码的假想计算机,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆和一个存储方法域.JVM是运行在操作系统之上的,它与硬件没有直接的交互. [外链图片 ...
- 起redis服务时报错Creating Server TCP listening socket *:6379: bind: No such file or directory
- JVM强引用、软引用、弱引用、虚引用、终结器引用垃圾回收行为总结
JVM引用 我们希望能描述这样一类对象: 当内存空间还足够时,则能保留在内存中:如果内存空间在进行垃圾收集后还是很紧张,则可以抛弃这些对象. -[既偏门又非常高频的面试题]强引用.软引用.弱引用.虚引 ...
- Spring Boot项目集成flyway
一.为什么要使用flyway Flyway的定位:数据库的版本控制. 用一种简单.干净的方案,帮助用户完成数据库迁移的工作.使用Flyway,用户可以从任意一个数据库版本迁移到最新版本,简单而且有 ...
- swagger2注解详细说明
@Api:用在请求的类上,表示对类的说明 tags="说明该类的作用,可以在UI界面上看到的注解" value="该参数没什么意义,在UI界面上也看到,所以不需要配置&q ...
- Redis可视化工具推荐
前言 Redis可视化工具目前好用的免费的几乎难以寻迹,百度能搜索到的推荐比较多的是Redis Desktop Manager 官网地址:https://redisdesktop.com/pricin ...
- TP 3.2 图片处理类
TP 3.2 图片处理类 <?php namespace Common\Common; class ImageEdit{ /** * [上传图片并生成缩略图] * @param [type] $ ...
- HTTP 的前世今生,那些不为人知的秘密
每个时代,都不会亏待会学习的人. 大家好,我是 yes. HTTP 协议在当今的互联网可谓是随处可见,一直默默的在背后支持着网络世界的运行,对于我们程序员来说 HTTP 更是熟悉不过. 平日里我们都说 ...
- Java基础——锁
1.锁 当一个共享资源被多方访问时为了避免发生冲突而施加的一种机制 2.乐观锁和悲观锁 Java中锁在宏观分为乐观锁和悲观锁 乐观锁:是一种乐观思想,认为多读少写,一般情况下数据在修改时不会出现冲突, ...