Windows API 编程入门

Windows 工作原理的中心思想就是“动态链接”概念。Windows 自身带有一大套函数,应用程序就是通过调用这些函数

来实现它的用户界面和在屏幕上显示文本和图形的。这些函数都是在动态链接库里实现的。

这些文件的名称都带有后缀 .dll,或有时带有 .exe。

Windows 的 3 个主要子系统:内核(kernel),用户(user),GDI。

内核 负责操作系统的传统工作:如 内存管理,文件输入/输出 以及任务管理等。

用户 指的是用户界面,负责所有的窗口管理。

GDI 就是图形设备接口,负责在屏幕或打印机上显示文本与图形。

在 Windows 程序中,调用 Windows 函数与调用 C 语言的库函数没有什么两样。

最主要的区别就是 C 语言库函数的机器代码会直接链接到你的程序代码中去,而 Windows 函数则是放到你的程序之外的 DLL 里。

Windows 程序运行时,它通过一个叫“动态链接”的进程与 Windows 接口。

每个 Windows 的 EXE 文件包含它所要用到的各个动态链接库以及库中的函数的引用地址。

当一个 Windows 程序被装入内存后,程序中的函数调用都被解析 DLL 函数入口的指针,同时这些被调用的函数也被装入内存。

当链接 Windows 程序以生存可执行文件时,一定得链接你的编程环境所提供的特殊的“导入库”。

这些导入库包含所有 Windows 函数调用要碰到的动态链接库的名字及引用信息。链接程序利用这些信息构建 EXE 文件中的表格,

当装入程序的时候,Windows 要靠这些表格来解析 Windows 函数调用。

另外值得提醒的一点是,MFC 是对 API 的封装,隐藏了许多复杂的情节。

Windows 的 Hello World!程序:

#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
     MessageBox (NULL, TEXT ("Hello, World!"), TEXT ("HelloMsg"), MB_OKCANCEL) ;
     return 0 ;
}

该程序的 #include<windows.h> 就是像 C 语言的 #include<stdio.h> 一样重要的头文件。

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

就像 C 语言的 int main(void) 一样,都是程序的入口。C 程序的入口是 main,Windows 程序的入口是 WinMain。

绝大多数的 Windows 程序都遵循“匈牙利标记法”:
变量名前都有一个短前缀,用以表明该变量的数据类型。

前缀 数据类型
c char 或 WCHAR 或 TCHAR
by BYTE(无符号字符)
n short(短整型)
i int(整型)
x,y int,表示 x 坐标和 y 坐标
cx,cy int,表示 x 或 y 的长度,c 表示“count”(计数)
B 或 f BOOL(int); f 表示“flag”
w WORD(无符号短整型)
l LONG(长整型)
dw DWORD(无符号长整型)
fn 函数
s 字符串
sz 以零结束的字符串
h 句柄
p 指针

WinMain的第一个参数叫做"实例句柄"(Instance Handle)。句柄就是一个数值,用它来标识某些东西。

句柄是一个 4byte 的数值,可用来标识 窗口,按钮,图标,滚动条,输出设备,控件或者文件等等。

WinMain的第二个参数通常是 NULL。

WinMain的第三个参数是用来运行程序的命令行(CommandLine)。

WinMain的第四个参数是用来指明程序最初如何显示。(最大化到全屏,正常显示,最小化到任务栏)。

MessageBox函数:

函数原型:int WINAPI MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);

第一个参数通常是一个句柄,可以为NULL。

第二个参数是在信息框里出现的文本字符串。

第三个参数是标题栏上显示的文本字符串。

第四个参数是以前缀MB_开头的一些常量组合。用以对话框中的按钮,图标等等。

函数的调用: MessageBox( NULL, TEXT("信息框里的内容“), TEXT("标题框里的标题”), MB_OK);

该函数一般都如此调用,第四个参数都是 MB_***,以 MB 开头的常量。

原文地址:https://www.cnblogs.com/M-Anonymous/p/9291315.html

时间: 2024-10-09 02:22:09

Windows API 编程入门的相关文章

Mysql C语言API编程入门讲解

原文:Mysql C语言API编程入门讲解 软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程.  API,全称Application Programming Interfaces,即应用程序编程接口,我们可以调用这些接口,执行API函数提供的功能.  Mysql C语言API就是用C语言编写的Mysql编程接口,使用这些接口函数可以实现对Mysql数据库的查询等操作.  Mysql的安装  要进

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

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe

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

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

浅谈Windows API编程

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

Windows API 编程----将错误代码转换成错误描述信息

Windows编程有时会因为调用函数而产生错误,调用GetLastError()函数可以得到错误代码.如果错误代码为0,说明没有错误:如果错误代码不为0,则说明存在错误. 而错误代码不方便编程人员或用户直观理解到底发生了什么错误.Visual Studio 2015(或之前的版本)提供了“错误查找”的外部工具,输入错误代码即可以查看到底发生了什么错误. 如果想在程序代码中查看错误代码对应的错误信息,可以编写如下函数来实现: #include<iostream> #include<Wind

Mysql C语言API编程入门讲解【转载】

软件开发中我们经常要访问数据库,存取数据,之前已经有网友提出让鸡啄米讲讲数据库编程的知识,本文就详细讲解如何使用Mysql的C语言API进行数据库编程.鞍山皮肤病专科医院www.0412pfk.net API,全称Application Programming Interfaces,即应用程序编程接口,我们可以调用这些接口,执行API函数提供的功能. Mysql C语言API就是用C语言编写的Mysql编程接口,使用这些接口函数可以实现对Mysql数据库的查询等操作. Mysql的安装 要进行M

Windows API 编程----EnumWindows()函数的用法

1. 函数原型: BOOL WINAPI EnumWindows( _In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam); lpEnumFunc: 应用程序定义的回调函数的指针 lParam:         传递给回调函数的应用程序定义的值 MSDN中对EnumWindows的解释: Enumerates all top-level windows on the screen by passing the handle to each window,

Windows API 编程-----DLL编程之禁止加载自己

和可执行文件一样,动态链接库也有自己的入口地址,如果系统或者当前进程的某个线程调用LoadLibrary函数加载或者使用FreeLibrary卸载该动态链接库的时候,会自动使用3个特定的堆栈参数跳转到该地址来运行.入口函数是为了完成动态链接库代码的初始化和善后工作,比如卸载后的资源释放. 这三个参数具有特殊的含义. BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) 第一个参数

windows API编程第二天2015.11.15

现在在公司加班,但是,不太喜欢现在这份工作,想去跳槽转去C#,但是基础太弱,在努力学习.加油 改天注释一下这个代码,然后去搬(jia)砖(ban)去喽…… 1 #include <windows.h> 2 /* 3 Get System Infomation and Copy to a File 4 */ 5 int main(int argc, TCHAR argv []) 6 { 7 // File Handle 8 HANDLE hFile; 9 DWORD dwWritten; 10