Windows API 编程学习记录<二>

恩,开始写Windows API编程第二节吧。

上次介绍了几个关于Windows
API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解。这节我们就使用Windows API 让大家来了解下Windows
API的用法。

第一个介绍的Windows API
当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧:

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

恩,你现在肯定会觉得这是什么啊?
怎么好像除了int剩下的一个也不认识。以后我们会解释。但在解释之前我们必须了解一个Windows API
编程的常识,就是在Windows编程中,它为了方便记忆和使用,给原来咱们知道的基本类型定义了大量的宏定义或者使用结构体定义了大量新的数据结构。
比如这个LPCTSTR 你一定会说,这是什么数据类型啊? 原来从来没见过。但是其实它的本质就是一个指针,它是一个指向字符串的指针。
而UINT其实就是 unsigned int 也就是无符整型,在Windows API
编程中会遇到很多很多这样新的类型,每次遇到去上网查下就行。你只要知道这些新的类型本质还是咱们学过的那些 int,char,指针就行。
现在让我们使用一下这个API:

#include<windows.h>

int WINAPI
WinMain(HINSTANCE
hInstance,
                         
HINSTANCE
hPreInstance,
                         
LPSTR
lpCmdLine,
                         
int nShowCmd)
      
{
              
MessageBox(NULL, "你好", "我的第一个窗口程序",
MB_OK);
              
return 0;
       }

在编译器下运行这段代码就会的到下面的运行结果,是不是觉得这就是平时我们见到的那些对话框:

这下我们来仔细解释下这段代码具体是什么意思(可能现在有些解释看不懂,但还是都看下,以后就会慢慢理解的)

1. #include<windows.h>

这个就是Windows API
编程必须需要的头文件,如果你学过C语言,你就会知道,在头文件中声明了大量的函数供我们使用,这个MessageBox
在这个头文件有声明,我们在使用API的时候,必须要包含这个头文件,否则编译器不会识别API。

2. int
WINAPI WinMain(HINSTANCE hInstance,
                        
HINSTANCE hPreInstance,
                        
LPSTR lpCmdLine,
                        
int nShowCmd)

这个函数是一个32位应用程序的入口点,它会被系统自动调用,是不是感觉和C语言中的main函数很相似,只是这个Winmain函数怎么有那么多的参数?还有那个WINAPI是什么意思  
呢? 现在我们来解释下,WINAPI 是__stdcall
的宏定义,它的作用是定义函数参数入栈顺序的。而WinMain函数那四个参数,我们来解释下,这里面有些解释比较抽象,不懂先放下,以后编写的程序多了就会自然而然理解的。解释中有个句柄这个术语估计大家比较陌生,其实可以这样理解,这就是Windows给系统中运行中每一个程序或资源起了一个互不相同的名字,只是官方叫法叫句柄(HANDLE)。以下就是WinMain函数参数的解释:

hInstance:应用程序当前实例的句柄。

hPrevlnstance:应用程序的先前实例的句柄。对于同一个程序打开两次,出现两个窗口第一次打开的窗口就是先前实例的窗口。对于一个32位程序,该参数总为NULL。

lpCmdLine:指向应用程序命令行的字符串的指针,不包括执行文件名。

nCmdShow:指明窗口如何显示(是隐藏还是显示,有没有最大化按钮之类的),具体取值可以自己搜索。

3.
MessageBox(NULL, "你好", "我的第一个窗口程序", MB_OK);

这个API函数就是显示一个模态对话框,这个函数的定义是:int WINAPI
MessageBox(
HWND hWnd, LPCTSTR
lpText, LPCTSTR lpCaption,
UINT uType);

以下就是MessageBox函数参数解释:

hWnd:消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。

lpText:消息框的内容。

lpCaption:消息框的标题。

uType:指定一个决定对话框的内容和行为的位标志集(就是对话框显示的具体样式,比如有一个感叹号,或者有一个确定键),具体取值可以自己搜索。

恩,这就是简单的Windows API
的一个应用,现在是不是觉得API编程也不是那么神秘了。

Windows API 编程学习记录<二>,布布扣,bubuko.com

时间: 2024-08-01 22:45:35

Windows API 编程学习记录<二>的相关文章

Windows API 编程学习记录&lt;三&gt;

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,

Spring Boot学习记录(二)--thymeleaf模板

Spring Boot学习记录(二)–thymeleaf模板 标签(空格分隔): spring-boot 自从来公司后都没用过jsp当界面渲染了,因为前后端分离不是很好,反而模板引擎用的比较多,thymeleaf最大的优势后缀为html,就是只需要浏览器就可以展现页面了,还有就是thymeleaf可以很好的和spring集成.下面开始学习. 1.引入依赖 maven中直接引入 <dependency> <groupId>org.springframework.boot</gr

Windows界面编程第十二篇 位图显示特效 飞入效果与伸展效果

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8696726 欢迎关注微博:http://weibo.com/MoreWindows Windows界面编程之位图显示特效系列目录: 1. <Windows界面编程第九篇位图显示特效交错效果> http:/

浅谈Windows API编程

WinSDK是编程中的传统难点,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制…… WinSDK是编程中的传统难点,曾经听有一个技术不是很好的朋友乱说什么给你API谁都会用,其实并非那么简单,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制. 首先来谈谈句柄,初学习WinSDK的朋友刚看到这个词头大了吧?

Windows Phone 7编程学习点滴二——设备方向、系统主题和系统托盘

1 有两种方式可以改变设备的方向: (1) 将SupportedOrientation设置为“PortraitOrLandscape”让操作系统为你实现. (2) 是通过代码实现: OrientationChanged 事件. 1 this.OrientationChanged += new EventHandler<OrientationChangedEventArgs>(MainPage_OrientationChanged); 1 void MainPage_OrientationCha

DirectX游戏编程学习(二)文本显示与基本图元绘制

一.文本显示 在游戏开发中,在游戏界面上现实一些文字信息是很常见的一件事,要学习DX游戏开发,显然了解DX文本如何显示是必不可少的.字符包含诸多的属性,比如颜色,大小,是否加粗,斜体,等等.我们通过DX提供的LPD3DFONT对象来指定这些字体属性,然后再进行渲染. 采用WIN32程序框架实现文本绘制的具体流程如下: 二.基本图元的绘制 无论再复杂的物体,它归根结底都是由基本图元构成的.在CG(Computer graphics)领域,人们普遍使用一组或者多组包围物体表面的多边形近似的表示真实的

Windows API 编程入门

Windows 工作原理的中心思想就是"动态链接"概念.Windows 自身带有一大套函数,应用程序就是通过调用这些函数 来实现它的用户界面和在屏幕上显示文本和图形的.这些函数都是在动态链接库里实现的. 这些文件的名称都带有后缀 .dll,或有时带有 .exe. Windows 的 3 个主要子系统:内核(kernel),用户(user),GDI. 内核 负责操作系统的传统工作:如 内存管理,文件输入/输出 以及任务管理等. 用户 指的是用户界面,负责所有的窗口管理. GDI 就是图形

ES6深入学习记录(二)promise对象相关

1.Promise的含义 Promise是异步编程的一种解决方案,比传统的解决方案--回调函数和事件更合理和强大.ES6将其写进了语言标准,统一了用法,原生提供了promise对象. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步的操作)的结果.从语法上说,Pormise是一个对象,从它可以获取异步操作的消息.Promise提供统一的API.各种异步操作都可以用同样的方法进行处理. Promise对象的两个特点: 1.对象的状态不受外界影响.Promis

Spring学习记录(二)---容器和属性配置

下载spring包,在eclipse搭建spring环境. 这步我在eclipse中无法导入包,看网上的: http://sishuok.(和谐)com/forum/blogPost/list/2428.html 建一个java project 三个java文件,一个xml文件 1 package com.guigu.spring.beans; 2 3 public class HelloWord { 4 private String name; 5 public String getName(