概述
windows操作系统中所谓句柄是惟一标识某个Windows对象(例如程序实例、窗口、光标、图标、画刷和菜单等)的一个32位无符号整数,句柄是Windows对象的唯一标识符,只有有了句柄,程序才能使用与其对应的Widows对象。Windows程序通常通过调用win32API函数来获取某个Windows对象的句柄。
Windows操作系统的很多功能模块是有C语言写的。句柄的数据类型在winn.h中是这样说明的:typedef void* HANDLE;所以句柄是一个泛型(无类型)指针,从物理上看它是一个指针。但从逻辑上看他又不是一个指针,他不是指向一个Windows对象存储单元的首地址,而是指向包含了使用该对象有关信息的一块存储单元,这里面有对象的地址还有其他有关的信息。所以从逻辑上说他是一个对象的唯一标识。
既然是唯一标识,句柄所指向的内容是不能由句柄操作来改变的,只能由系统来改变。这类似于不能给指针随意赋一个地址值。所以处理句柄时,允许做的唯一操作时检查他是否是一个有效句柄。不等于0时就认为是一个有效句柄,等于0时就是无效句柄。有了句柄,只要给出一个句柄的命令,操作系统就会进行相关的操作,使操作变得简单。
Windows是一个很全面的操作系统,除了协调应用程序的执行、分配内存、管理系统资源之外,他同时也是也是一个很大的服务中心。调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮助应用程序达到开启视窗,描绘图形,使用周边设备等目的。由于这些函数服务的对象是应用程序,所以称之为应用程序编程接口,简称API。
API函数是开发Windows应用程序最底层的东西,就连Windows本身的许多应用程序都应用API函数来实现的。随着Windows系统的不断升级,与系统相关的API函数也在不断的变化,最明显的变化是有原来的16位变成了32位。有的API函数可以在每个版本的Windows系统中运行,有的则不可以,例如实现窗体半透明效果的SetLayeredWindowsAttributes函数,他只能在Windows2000及以后的系统下运行。
API函数都封装在动态链接库中,对API函数的调用都需要加载动态链接库,常用的API函数大都封装在KDRNEL.dll、GDL.dll、USER.dll等几个动态链接库中,但在Microsoft Visual C++中调用API函数并不需要额外加载动态链接库的代码,因为Visual C++会自动与常用的动态链接库相连。
API函数是开发Win32应用程序的基础,即使使用MFC库来开发Win32应用程序,也要对API函数有一定的了解。因为虽然MFC对API函数进行了封装,但并没有封装所有的API函数,例如发送消息函数SHBrowersForFolder,在开发MFC应用程序过程中经常调用到这个函数。在Microsoft Visual C++中直接使用API函数需要再前面加上::符号,这个符号用来调用全局函数而不是对象函数。在MFC中有许多和API函数同名的函数,在使用API函数的过程中直接按API函数的参数去写,编译器能自动识别这个API函数。
API函数有许多,分为窗口管理,国际特性,图形设备接口,系统服务,网络服务等几个部分,经常用到的就只有窗口管理和图形设备接口两个部分。下面就对这两部分进行
窗口管理函数主要用来创建和管理用户界面,包括了按钮、对话框、光标、编辑框等对象的创建以及处理鼠标、键盘输入和处理消息等。窗口管理常用的函数参照表如下:
函数 | 描述 |
CreateWindow | 创建一个窗体 |
CreateWindowEx | 创建一个窗体 |
CreateDialog | 通过资源创建对话框 |
CreateIcon | 按指定的大小、颜色、位、创建图标 |
DrawIcon | 在限定的设备上下文窗口的客户区域绘制图标 |
GetIconInfo | 获取图标或光标的信息 |
CreateCursor | 创建一个指定大小、位模式和热点的光标 |
GetCusor | 获取当前光标的句柄 |
SetCusor | 确定光标的形状 |
ShowCursor | 显示或隐藏光标 |
CreateMenu | 创建一个菜单 |
DeleteMenu | 从指定菜单里删除一个菜单项 |
EnableMenuItem | 使指定的菜单项有效、无效或变灰 |
GetMenu | 取得分配给指定窗口的菜单的句柄 |
LoadMenu | 从与应用程序实例相联系的可执行文件中加载指定的菜单资源 |
TrackPopupMenu | 从指定的位置显示菜单 |
DlgDirList | 显示指定文件夹的内容 |
RegisterClass | 注册窗口类 |
图形设备接口类函数提供对设备上下文中各个对象的操作,主要有位图对象,颜色对象,画刷对象,画笔对象等。
图形设备接口藏用的函数如下表所示
函数 | 描述 |
BitBlt | 源设备环境区域中的像素通目标设备环境转换 |
CreateCompatibleBitmap | 创建于指定的设备环境相的设备兼容的位图 |
CreateDIBitmap | 创建与设备有关的位图 |
GetDiBits | 获取指定位图的信息 |
GetPixel | 检索指定坐标点的像素的RGB颜色值 |
LoadBitmap | 从模板的可执行文件中加载指定的位图资源 |
CreateBrushIndirect | 创建具有指定风格、颜色和模式的画刷 |
CreateSolidBrush | 创建一个具有指定颜色的画刷 |
CreatePalette | 创建一个逻辑的调色板 |
ResizePalette | 增大或减小基于指定值的逻辑调色板的大小 |
SelectPalette | 选择指定的逻辑调色板到指定的设备环境中 |
CreateCompatibleDC | 创建一个与指定设备兼容的内存设备上下文环境 |
GetDeviceCaps | 获取指定设备的设备指定信息 |
GetStockObject | 检索预定义的备用笔、刷子、字体或者调色板的句柄 |
Chord | 画一段圆弧 |
FillRect | 用指定的画刷填充矩形 |
Polygon | 画一个由相连的两个以上顶点的多边形 |
Rectangle | 画一个矩形 |
DrawText | 在指定的矩形里写入格式化文本 |
GetTextColor | 获得指定设备环境的当前文字颜色 |
GetTextFace | 获得被选进指定设备环境中的姿态字样名 |
最后
以上就是长情魔镜为你收集整理的Windows句柄和API函数介绍以及常用的API函数的全部内容,希望文章能够帮你解决Windows句柄和API函数介绍以及常用的API函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复