API函数详解

API函数详解

摘要:什么是API

你不学API,你大概将停留在初级水平,无法往上攀登

API文本游览器

什么时候使用什么函数,什么时候使用什么结构类型,什么时候使用什么常数

一些API函数集

正文:

API函数详解(转载自红尘如烟)

标签:

首先,有必要向大家讲一讲,什么是API。所谓API本来是为C和C++程序员写的。API说来说去,就是一种函数,他们包含在一个附加名为DLL的动态连接库文件中。用标准的定义来讲,API就是Windows的32位应用程序编程接口,是一系列很复杂的函数,消息和结构,它使编程人员可以用不同类型的编程语言编制出的运行在Windows95和Wi ndows NT操作系统上的应用程序。可以说,如果你曾经学过VC,那么API对你来说不是什么问题。但是如果你没有学过VC,或者你对Windows95的结构体系不熟悉,那么可以说,学习API将是一件很辛苦的事情。

如果你打开WINDOWS的SYSTEM文件夹,你可以发现其中有很多附加名为DLL的文件。一个DLL中包含的API函数并不只是一个,数十个,甚至是数百个。我们能都掌握它嘛?回答是否定的∶不可能掌握。但实际上,我们真的没必要都掌握,只要重点掌握Win dos系统本身自带的API函数就可以了。但,在其中还应当抛开掉同VB本身自有的函数重复的函数。如,VB的etAttr命令可以获得文件属性,SetAttr可以设置文件属性。对A PI来讲也有对应的函数GetFileAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下来的也就5、600个。是的,也不少。但,我可以敢跟你说,只要你熟悉地掌握100个,那么你的编程水平比现在高出至少要两倍。尽管人们说VB和WINDOWS具有密切的关系,但我认为,API更接近WINDOWS。如果你学会了API,首要的收获便是对W INDOWS体系结构的认识。这个收获是来自不易的。

如果你不依靠API会怎么样?我可以跟你说,绝大多是高级编程书本(当然这不是书的名程叫高级而高级的,而是在一开始的《本书内容》中指明《本书的阅读对象是具有一定V B基础的读者》的那些书),首先提的问题一般大都是从API开始。因此可以说,你不学A PI,你大概将停留在初级水平,无法往上攀登。唯一的途径也许就是向别人求救∶我快死了,

快来救救我呀,这个怎么办,那个怎么办?烦不烦呢?当然,现在网上好人太多(包括我在内,嘻嘻),但,你应当明白,通过此途径,你的手中出不了好的作品。这是因为缺乏这些知识你的脑子里根本行不成一种总体的设计构思。

API文本游览器

很多API函数都是很长很长的。想看什么样子吗?如下就是作为例子的API DdeClien tTransaction函数∶

Declare Function DdeClientTransaction Lib"user32"(pData As Byte,ByVal cbData As Long,ByVal hConv As Long,ByVal hszItem As Long,ByVal wF mt As Long,ByVal wType As Long,ByVal dwTimeout As Long,pdwResult As Long)As Long

哇!这么长?如果你从来没有接触过API,我想你肯定被吓住了。你也许考虑,该不该继续学下去。不过不要担心,幸运的是Microsoft的设计家们为我们提供了有用的工具,这便是API文本查看器。

通过API文本查看器,我们可以方便地查找程序所需要的函数声明、结构类型和常数,然后将它复制到剪贴板,最后再粘贴到VB程序的代码段中。在大多数情况下,只要我们确定了程序所需要的函数、结构和常数这三个方面后,就可以通过对API文本游览器的以上操作将他们加入到程序段中,从而程序中可以使用这些函数了。这些是学习API最基本的常识问题,它远远占不到API的庞大的体系内容。今后我们把精力浪费(这绝不是浪费)在哪里呢?那就是∶

什么时候使用什么函数,什么时候使用什么结构类型,什么时候使用什么常数。

API函数声明

让我们回想一下。在VB中,如何声明函数呢?我想,如果你正在看此文,那么你绝对能够回答得出这个问题。以下便是你应该很熟悉的函数声明∶

Function SetFocus(ByVal hwnd As Long)As Long

即,这行代码定义了名为SetFocus的函数,此函数具有一个Long型数据类型的参数,并按值传递(ByVal),函数执行后将返回一个Long型数据。

API函数的声明也很类似,如,API中的SetFocus函数是这样写的∶

Declare Function SetFocus Lib"user32"Alias"SetFocus"(ByVal hwnd As L ong)As Long

有点复杂了一些。是的,是复杂了点。但我可以告诉你,除了这些多出来的部分,其他部分还是和你以前学到的东西是一样的。函数在程序中的调用也是一样。如:

Dim dl As Long

dl&=SetFoucs(Form1.Hwnd)

它不象你自己写的程序那样能够看到里面的运行机理,也不像VB自带的函数那样,能够从VB的联机帮助中查到其用法。唯一的方法就是去学、查VB以外的资料。

Declare语句用于在模块级别中声明对动态链接库(DLL)中外部过程的引用。对此,你只要记住任何API函数声明都必须写这个语句就可以了。

Iib指明包含所声明过程或函数的动态链接库或代码资源。也就是说,它说明的是,函数或过程从何而来的问题。

如在上例中,SetFocus Lib"user32"说明函数SetFocus来自user32.dll文件。主要的dll动态连接库文件有∶

user32.dll Windows管理。生成和管理应用程序的用户接口。

GDI32.dll图形设备接口。产生Windows设备的图形输出

Kernel32.dll系统服务。访问操作系统的计算机资源。

注意,当DLL文件不在Windows或System文件夹中的时候,必须在函数中说明其出处(路径)。如,SetFocus Lib"c:\Mydll\user32"函数声明中的Alias是可选的。表示将被调用的过程在动态链接库(DLL)中还有另外的名称(别名)。如,Alias"SetFocus",说明SetFocus函数在User32.dll中的另外一个名称是,

SetFocus。怎么两个名都一样呢?当然,也可以是不同的。在很多情况下,Alias说明的函数名,即别名最后一个字符经常是字符A,如SetWindowsText函数的另一个名称是Set WindowsTextA,表示为Alias"SetWindowsTextA"。这个A只不过是设计家们的习惯的命名约定,表示函数属于ANSI版本。

那么,别名究竟有什么用途呢?从理论上讲,别名提供了用另一个名子调用API的函数方法。如果你指明了别名,那么尽管我们按Declare语句后面的函数来调用该函数,但在函数的实际调用上是以别名作为首要选择的。如,以下两个函数(Function,ABCD)声明都是有效的,他们调用的是同一个SetFocus函数∶

Declare Function SetFocus Lib"user32""SetFocus"(ByVal hwnd As Long) As Long

Declare ABCD SetFocus Lib"user32"Alias"SetFocus"(ByVal hwnd As Long) As Long

需要注意的是,选用Alias的时候,应注意别名的大小写;如果不选用Alias时的时候,函数名必须注意大小写,而且不能改动。当然,在很多情况下,由于函数声明是直接从AP I文本游览器中拷贝过来的,所以这种错误的发生机会是很少的,但您有必要知道这一点。

最后提醒你一句,API声明(包括结构、常数)必须放在窗体或模块的"通用(General Decl arations)段。

数据类型与"类型安全"

API函数中使用的数据类型基本上和VB中的一样。但作为WIN32的API函数中,不存在Integer数据类型。另外一点是在API函数中看不到Boolean数据类型。Variant 数据类型在API函数中是以Any的形式出现,如Data As Any。尽管其含义是允许任意参数类型作为一个该API函数的参数传递,但这样做存在一定的缺点。其原因是,这将会使得对目标参数的所有类型检查都会被关闭。这自然会给各种类型的参数调用带来了产生错误的机会。

为了强制执行严格的类型检查,并避免上面提到的问题,一个办法是在函数里使用上面提到到Alias技术。如对API函数GetDIBits可进行另外一种声明方法。如下∶GetDIBits函数的原型∶

Public Declare Function GetDIBits Lib"gdi32"Alias"GetDIBits"(ByVal aHD C As Long,ByVal hBitmap As Long,ByVal nStartScan As Long,ByVal nNu mScans As Long,lpBits As Any,lpBI As BITMAPINFO,ByVal wUsage As Lo ng)As Long

GetDIBits函数的改型∶

Public Declare Function GetDIBitsLong Lib"gdi32"Alias"GetDIBits"(ByVal aHDC As Long,ByVal hBitmap As Long,ByVal nStartScan As Long,ByVal nNumScans As Long,lpBits As Long,lpBI As BITMAPINFO,ByVal wUsage As Long)As Long

通过本课程前面所学到的知识,我们已经可以得知原型GetDIBits函数也好,改型GetDIBitsLong函数也好,实际将调用的都是Alias所指定的GetDIBits原函数。但你应当看到,两者的区别在于,我们在改型的函数中强制指定lpBits参数为Long形。这样就会使得函数调用中发生的错误机率减少到了最小。这种方法叫做"安全类型"声明。

API函数中经常看到的数据类型有∶Long,String,Byte,Any....(也就这些吧。)

常数

对于API常数来讲,没有什么太特别的学问。请看VB中的以下代码∶

Msg=MsgBox("您好",vbOKCancel)

我们知道,vbOKCancel这个常数的值等于1。对上面的代码我们完全可以这样写,而不会影响代码的功能∶

Msg=MsgBox("您好",1)

但你大概不太愿意选择后一种,因为这会使得看懂代码费劲起来。这种方法也被API 采取了。只是API常数必须在事情之前做好初始化声明VB本身是看不懂的。其内容仍然来自与API文本游览器。具体形式如下等等∶

Public Const ABM_ACTIVATE=&H6

Public Const RIGHT_CTRL_PRESSED=&H4

Public Const RPC_E_SERVER_DIED=&H80010007

Private Const RPC_S_CALL_FAILED_DNE=1727&

在常数的初始化中,有些程序使用Global,如Global Const ABM_ACTIVATE=&H6,但我认为Public完全可以代替它。过去我也用过Global,但现在不大用了。一会儿用这个,一会儿用那个,各程序之间不能保持一致性了,起码看起来别扭。

结构

结构是C和C++语言中的说法。在VB中一般称为自定义数据类型。想必很多朋友都已经认识它。在API领域里,我更喜欢把它叫做结构,因为API各种结构类型根本不是我定义(自定义)的。

在VB中,API结构同样由TYPE.......END TYPE语句来定义。如,在API中,点(P oint)结构的定义方法如下:

Public Type POINTAPI

X As Long'点在X坐标(横坐标)上的坐标值

Y As Long'点在Y坐标(纵坐标)上的坐标值

End Type

又如,API中矩形(Rect)结构的定义如下∶

Public Type RECT

Left As Long'矩形左上角的X坐标

Top As Long'矩形左上角的Y坐标

Right As Long'矩形右下角的X坐标

Bottom As Long'矩形右下角的Y坐标

End Type

这些内容同样可以从API文本游览器中拷贝过来。这些结构中的变量名可随意改动,而不会影响结构本身。也就是说,这些成员变量都是虚拟的。如,POINTAPI结构可改为如下∶

Public Type POINTAPI

MyX As Long'点在X坐标(横坐标)上的坐标值

MyY As Long'点在Y坐标(纵坐标)上的坐标值

End Type

不过,一般来讲,是没有这种必要的。结构本身是一种数据类型,因此,使用时必须声明具体变量为该结构型,才能在程序中真正使用到该结构。结构的声明方法和其他数据的声明方法一样,如,以下语句把变MyPoint声明为POINTAPI结构类型∶

MyPoint As POINTAPI

引用结构中的成员变量也十分简单,在结构名后面加上一个".",然后紧接着写要引用的成员变量即可。这很象VB中的引用一个对象的某个属性。如,假如我们把上面已经声明的MyPoint结构中的X变量的值赋给变量Temp&

则代码如下∶

Temp&=MyPoint.X

但需要特别注意的是,你千万不要认为上例中的MyPoint是一个值。它不是值,而是地址(指针)。值和地址是完全不同的概念。结构要求按引用传递给WINDOWS函数,即所有API函数中,结构都是按ByRef传递的(在Declare语句中ByRef是默认型)。对于结构的传递,你不要试图采用ByVal,你将一无所获。由于结构名实际上就是指向这个结构的指针(这个结构的首地址),所以,你也就传送特定的结构名就可以了(参见小结,我用红色字体来突出了这种传递方式)。

由于结构传送的是指针,所以函数将直接对结构进行读写操作。这种特性很适合于把函数执行的结果装载在结构之中。

小结

以下的程序是为了总结本课中学到的内容而给出的。启动VB,新建一个项目,添加一

个命令按钮,并把下面的代码拷贝到代码段中,运行它。

Private Declare Function GetCursorPos Lib"user32"(lpPoint As POINTAPI) As Long

Private Type POINTAPI'定义点(Point)结构

X As Long'点在X坐标(横坐标)上的坐标值

Y As Long'点在Y坐标(纵坐标)上的坐标值

End Type

Sub PrintCursorPos()

Dim dl AS Long

Dim MyPoint As POINTAPI

dl&=GetCursorPos(MyPoint)'调用函数,获取屏幕鼠标坐标

Debug.Print"X="&Str(MyPoint.X)&"and"&"Y="&Str(MyPoint.Y)

End Sub

Private Sub Command1_Click()

PrintCursorPos

End Sub

输出结果为(每次运行都可能得到不同的结果,这得由函数调用时鼠标指针在屏幕中所处的位置而决定)∶

X=240and Y=151

程序中,GetCursorPos函数用来获取鼠标指针在屏幕上的位置。

以上例子中,你可以发现,以参数传递的MyPpint结构的内容在函数调用后发生了实质性变化。这是由于结构是按ByRef传递的原因。

一些API函数集

1.控件与消息函数

AdjustWindowRect给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小AnyPopup判断屏幕上是否存在任何弹出式窗口

ArrangeIconicWindows排列一个父窗口的最小化子窗口

AttachThreadInput连接线程输入函数

BeginDeferWindowPos启动构建一系列新窗口位置的过程

BringWindowToTop将指定的窗口带至窗口列表顶部

CascadeWindows以层叠方式排列窗口

ChildWindowFromPoint返回父窗口中包含了指定点的第一个子窗口的句柄ClientToScreen判断窗口内以客户区坐标表示的一个点的屏幕坐标

CloseWindow最小化指定的窗口

CopyRect矩形内容复制

DeferWindowPos该函数为特定的窗口指定一个新窗口位置

DestroyWindow清除指定的窗口以及它的所有子窗口

DrawAnimatedRects描绘一系列动态矩形

EnableWindow指定的窗口里允许或禁止所有鼠标及键盘输入

EndDeferWindowPos同时更新DeferWindowPos调用时指定的所有窗口的位置及状态

EnumChildWindows为指定的父窗口枚举子窗口

EnumThreadWindows枚举与指定任务相关的窗口

EnumWindows枚举窗口列表中的所有父窗口

EqualRect判断两个矩形结构是否相同

FindWindow寻找窗口列表中第一个符合指定条件的顶级窗口

FindWindowEx在窗口列表中寻找与指定条件相符的第一个子窗口

FlashWindow闪烁显示指定窗口

GetActiveWindow获得活动窗口的句柄

GetCapture获得一个窗口的句柄,这个窗口位于当前输入线程,且拥有鼠标捕获(鼠标活动由它接收)

GetClassInfo取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本,结构中包含了与指定类有关的信息

GetClassLong取得窗口类的一个Long变量条目

GetClassName为指定的窗口取得类名

GetClassWord为窗口类取得一个整数变量

GetClientRect返回指定窗口客户区矩形的大小

GetDesktopWindow获得代表整个屏幕的一个窗口(桌面窗口)句柄

GetFocus获得拥有输入焦点的窗口的句柄

GetForegroundWindow获得前台窗口的句柄

GetLastActivePopup获得在一个给定父窗口中最近激活过的弹出式窗口的句柄GetLastError针对之前调用的api函数,用这个函数取得扩展错误信息

GetParent判断指定窗口的父窗口

GetTopWindow搜索内部窗口列表,寻找隶属于指定窗口的头一个窗口的句柄GetUpdateRect获得一个矩形,它描叙了指定窗口中需要更新的那一部分

GetWindow获得一个窗口的句柄,该窗口与某源窗口有特定的关系GetWindowContextHelpId取得与窗口关联在一起的帮助场景ID

GetWindowLong从指定窗口的结构中取得信息

GetWindowPlacement获得指定窗口的状态及位置信息

GetWindowRect获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内

GetWindowText取得一个窗体的标题(caption)文字,或者一个控件的内容GetWindowTextLength调查窗口标题文字或控件内容的长短

GetWindowWord获得指定窗口结构的信息

InflateRect增大或减小一个矩形的大小

IntersectRect这个函数在lpDestRect里载入一个矩形,它是lpSrc1Rect与lpSrc2Re ct两个矩形的交集

InvalidateRect屏蔽一个窗口客户区的全部或部分区域

IsChild判断一个窗口是否为另一窗口的子或隶属窗口

IsIconic判断窗口是否已最小化

IsRectEmpty判断一个矩形是否为空

IsWindow判断一个窗口句柄是否有效

IsWindowEnabled判断窗口是否处于活动状态

IsWindowUnicode判断一个窗口是否为Unicode窗口。这意味着窗口为所有基于文本的消息都接收Unicode文字

IsWindowVisible判断窗口是否可见

IsZoomed判断窗口是否最大化

LockWindowUpdate锁定指定窗口,禁止它更新

MapWindowPoints将一个窗口客户区坐标的点转换到另一窗口的客户区坐标系统MoveWindow改变指定窗口的位置和大小

OffsetRect通过应用一个指定的偏移,从而让矩形移动起来

OpenIcon恢复一个最小化的程序,并将其激活

PtInRect判断指定的点是否位于矩形内部

RedrawWindow重画全部或部分窗口

ReleaseCapture为当前的应用程序释放鼠标捕获

ScreenToClient判断屏幕上一个指定点的客户区坐标

ScrollWindow滚动窗口客户区的全部或一部分

ScrollWindowEx根据附加的选项,滚动窗口客户区的全部或部分

SetActiveWindow激活指定的窗口

SetCapture将鼠标捕获设置到指定的窗口

SetClassLong为窗口类设置一个Long变量条目

SetClassWord为窗口类设置一个条目

SetFocusAPI将输入焦点设到指定的窗口。如有必要,会激活窗口SetForegroundWindow将窗口设为系统的前台窗口

SetParent指定一个窗口的新父

SetRect设置指定矩形的内容

SetRectEmpty将矩形设为一个空矩形

SetWindowContextHelpId为指定的窗口设置帮助场景(上下文)ID SetWindowLong在窗口结构中为指定的窗口设置信息

SetWindowPlacement设置窗口状态和位置信息

SetWindowPos为窗口指定一个新位置和状态

SetWindowText设置窗口的标题文字或控件的内容

SetWindowWord在窗口结构中为指定的窗口设置信息

ShowOwnedPopups显示或隐藏由指定窗口所有的全部弹出式窗口

ShowWindow控制窗口的可见性

ShowWindowAsync与ShowWindow相似

SubtractRect装载矩形lprcDst,它是在矩形lprcSrc1中减去lprcSrc2得到的结果TileWindows以平铺顺序排列窗口

UnionRect装载一个lpDestRect目标矩形,它是lpSrc1Rect和lpSrc2Rect联合起来的结果

UpdateWindow强制立即更新窗口

ValidateRect校验窗口的全部或部分客户区

WindowFromPoint返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口

2.硬件与系统函数

ActivateKeyboardLayout激活一个新的键盘布局。键盘布局定义了按键在一种物理性键盘上的位置与含义

Beep用于生成简单的声音

CharToOem将一个字串从ANSI字符集转换到OEM字符集

ClipCursor将指针限制到指定区域

ConvertDefaultLocale将一个特殊的地方标识符转换成真实的地方ID

CreateCaret根据指定的信息创建一个插入符(光标),并将它选定为指定窗口的默认插入符

DestroyCaret清除(破坏)一个插入符

EnumCalendarInfo枚举在指定“地方”环境中可用的日历信息

EnumDateFormats列举指定的“当地”设置中可用的长、短日期格式EnumSystemCodePages枚举系统中已安装或支持的代码页

EnumSystemLocales枚举系统已经安装或提供支持的“地方”设置EnumTimeFormats枚举一个指定的地方适用的时间格式

ExitWindowsEx退出windows,并用特定的选项重新启动ExpandEnvironmentStrings扩充环境字串

FreeEnvironmentStrings翻译指定的环境字串块

GetACP判断目前正在生效的ANSI代码页

GetAsyncKeyState判断函数调用时指定虚拟键的状态

GetCaretBlinkTime判断插入符光标的闪烁频率

GetCaretPos判断插入符的当前位置

GetClipCursor取得一个矩形,用于描述目前为鼠标指针规定的剪切区域GetCommandLine获得指向当前命令行缓冲区的一个指针

GetComputerName取得这台计算机的名称

GetCPInfo取得与指定代码页有关的信息

GetCurrencyFormat针对指定的“地方”设置,根据货币格式格式化一个数字GetCursor获取目前选择的鼠标指针的句柄

GetCursorPos获取鼠标指针的当前位置

GetDateFormat针对指定的“当地”格式,对一个系统日期进行格式化GetDoubleClickTime判断连续两次鼠标单击之间会被处理成双击事件的间隔时间GetEnvironmentStrings为包含了当前环境字串设置的一个内存块分配和返回一个句柄

GetEnvironmentVariable取得一个环境变量的值

GetInputState判断是否存在任何待决(等待处理)的鼠标或键盘事件GetKBCodePage由GetOEMCP取代,两者功能完全相同

GetKeyboardLayout取得一个句柄,描述指定应用程序的键盘布局GetKeyboardLayoutList获得系统适用的所有键盘布局的一个列表GetKeyboardLayoutName取得当前活动键盘布局的名称

GetKeyboardState取得键盘上每个虚拟键当前的状态

GetKeyboardType了解与正在使用的键盘有关的信息

GetKeyNameText在给出扫描码的前提下,判断键名

GetKeyState针对已处理过的按键,在最近一次输入信息时,判断指定虚拟键的状态GetLastError针对之前调用的api函数,用这个函数取得扩展错误信息

GetLocaleInfo取得与指定“地方”有关的信息

GetLocalTime取得本地日期和时间

GetNumberFormat针对指定的“地方”,按特定的格式格式化一个数字

GetOEMCP判断在OEM和ANSI字符集间转换的windows代码页

GetQueueStatus判断应用程序消息队列中待决(等待处理)的消息类型

GetSysColor判断指定windows显示对象的颜色

GetSystemDefaultLangID取得系统的默认语言ID

GetSystemDefaultLCID取得当前的默认系统“地方”

GetSystemInfo取得与底层硬件平台有关的信息

GetSystemMetrics返回与windows环境有关的信息

GetSystemPowerStatus获得与当前系统电源状态有关的信息

GetSystemTime取得当前系统时间,这个时间采用的是“协同世界时间”(即UTC,也叫做GMT)格式

GetSystemTimeAdjustment使内部系统时钟与一个外部的时钟信号源同步GetThreadLocale取得当前线程的地方ID

GetTickCount用于获取自windows启动以来经历的时间长度(毫秒)GetTimeFormat针对当前指定的“地方”,按特定的格式格式化一个系统时间GetTimeZoneInformation取得与系统时区设置有关的信息GetUserDefaultLangID为当前用户取得默认语言ID

GetUserDefaultLCID取得当前用户的默认“地方”设置

GetUserName取得当前用户的名字

GetVersion判断当前运行的Windows和DOS版本

GetVersionEx取得与平台和操作系统有关的版本信息

HideCaret在指定的窗口隐藏插入符(光标)

IsValidCodePage判断一个代码页是否有效

IsValidLocale判断地方标识符是否有效

keybd_event这个函数模拟了键盘行动

LoadKeyboardLayout载入一个键盘布局

MapVirtualKey根据指定的映射类型,执行不同的扫描码和字符转换MapVirtualKeyEx根据指定的映射类型,执行不同的扫描码和字符转换MessageBeep播放一个系统声音。系统声音的分配方案是在控制面板里决定的mouse_event模拟一次鼠标事件

OemKeyScan判断OEM字符集中的一个ASCII字符的扫描码和Shift键状态OemToChar将OEM字符集的一个字串转换到ANSI字符集

SetCaretBlinkTime指定插入符(光标)的闪烁频率

SetCaretPos指定插入符的位置

SetComputerName设置新的计算机名

SetCursor将指定的鼠标指针设为当前指针

SetCursorPos设置指针的位置

SetDoubleClickTime设置连续两次鼠标单击之间能使系统认为是双击事件的间隔时间SetEnvironmentVariable将一个环境变量设为指定的值

SetKeyboardState设置每个虚拟键当前在键盘上的状态

SetLocaleInfo改变用户“地方”设置信息

SetLocalTime设置当前地方时间

SetSysColors设置指定窗口显示对象的颜色

SetSystemCursor改变任何一个标准系统指针

SetSystemTime设置当前系统时间

SetSystemTimeAdjustment定时添加一个校准值使内部系统时钟与一个外部的时钟信号源同步

SetThreadLocale为当前线程设置地方

SetTimeZoneInformation设置系统时区信息

ShowCaret在指定的窗口里显示插入符(光标)

ShowCursor控制鼠标指针的可视性

SwapMouseButton决定是否互换鼠标左右键的功能

SystemParametersInfo获取和设置数量众多的windows系统参数SystemTimeToTzSpecificLocalTime将系统时间转换成地方时间

ToAscii根据当前的扫描码和键盘信息,将一个虚拟键转换成ASCII字符

ToUnicode根据当前的扫描码和键盘信息,将一个虚拟键转换成Unicode字符UnloadKeyboardLayout卸载指定的键盘布局

VkKeyScan针对Windows字符集中一个ASCII字符,判断虚拟键码和Shift键的状态

3.菜单函数

AppendMenu在指定的菜单里添加一个菜单项

CheckMenuItem复选或撤消复选指定的菜单条目

CheckMenuRadioItem指定一个菜单条目被复选成“单选”项目

CreateMenu创建新菜单

CreatePopupMenu创建一个空的弹出式菜单

DeleteMenu删除指定的菜单条目

DestroyMenu删除指定的菜单

DrawMenuBar为指定的窗口重画菜单

EnableMenuItem允许或禁止指定的菜单条目

GetMenu取得窗口中一个菜单的句柄

GetMenuCheckMarkDimensions返回一个菜单复选符的大小GetMenuContextHelpId取得一个菜单的帮助场景ID

GetMenuDefaultItem判断菜单中的哪个条目是默认条目

GetMenuItemCount返回菜单中条目(菜单项)的数量

GetMenuItemID返回位于菜单中指定位置处的条目的菜单ID

GetMenuItemInfo取得(接收)与一个菜单条目有关的特定信息

GetMenuItemRect在一个矩形中装载指定菜单条目的屏幕坐标信息

GetMenuState取得与指定菜单条目状态有关的信息

GetMenuString取得指定菜单条目的字串

GetSubMenu取得一个弹出式菜单的句柄,它位于菜单中指定的位置GetSystemMenu取得指定窗口的系统菜单的句柄

HiliteMenuItem控制顶级菜单条目的加亮显示状态

InsertMenu在菜单的指定位置处插入一个菜单条目,并根据需要将其他条目向下移动InsertMenuItem插入一个新菜单条目

IsMenu判断指定的句柄是否为一个菜单的句柄

LoadMenu从指定的模块或应用程序实例中载入一个菜单

LoadMenuIndirect载入一个菜单

MenuItemFromPoint判断哪个菜单条目包含了屏幕上一个指定的点

ModifyMenu改变菜单条目

RemoveMenu删除指定的菜单条目

SetMenu设置窗口菜单

SetMenuContextHelpId设置一个菜单的帮助场景ID

SetMenuDefaultItem将一个菜单条目设为默认条目

SetMenuItemBitmaps设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√)

SetMenuItemInfo为一个菜单条目设置指定的信息

TrackPopupMenu在屏幕的任意地方显示一个弹出式菜单

TrackPopupMenuEx与TrackPopupMenu相似,只是它提供了额外的功能

以下是几个关于菜单函数的类型定义

MENUITEMINFO这个结构包含了菜单条目的信息

TPMPARAMS这个结构用于TrackPopupMenuEx函数以支持额外的功能

4.绘图函数

AbortPath抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作

AngleArc用一个连接弧画一条线

Arc画一个圆弧

BeginPath启动一个路径分支

CancelDC取消另一个线程里的长时间绘图操作

Chord画一个弦

CloseEnhMetaFile关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄

CloseFigure描绘到一个路径时,关闭当前打开的图形

CloseMetaFile关闭指定的图元文件设备场景,并向新建的图元文件返回一个句柄CopyEnhMetaFile制作指定增强型图元文件的一个副本(拷贝)

CopyMetaFile制作指定(标准)图元文件的一个副本

CreateBrushIndirect在一个LOGBRUSH数据结构的基础上创建一个刷子CreateDIBPatternBrush用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案)

CreateEnhMetaFile创建一个增强型的图元文件设备场景

CreateHatchBrush创建带有阴影图案的一个刷子

CreateMetaFile创建一个图元文件设备场景

CreatePatternBrush用指定了刷子图案的一幅位图创建一个刷子

CreatePen用指定的样式、宽度和颜色创建一个画笔

CreatePenIndirect根据指定的LOGPEN结构创建一个画笔

CreateSolidBrush用纯色创建一个刷子

DeleteEnhMetaFile删除指定的增强型图元文件

DeleteMetaFile删除指定的图元文件

DeleteObject删除GDI对象,对象使用的所有系统资源都会被释放

DrawEdge用指定的样式描绘一个矩形的边框

DrawEscape换码(Escape)函数将数据直接发至显示设备驱动程序

DrawFocusRect画一个焦点矩形

DrawFrameControl描绘一个标准控件

DrawState为一幅图象或绘图操作应用各式各样的效果

Ellipse描绘一个椭圆,由指定的矩形围绕

EndPath停止定义一个路径

EnumEnhMetaFile针对一个增强型图元文件,列举其中单独的图元文件记录EnumMetaFile为一个标准的windows图元文件枚举单独的图元文件记录EnumObjects枚举可随同指定设备场景使用的画笔和刷子

ExtCreatePen创建一个扩展画笔(装饰或几何)

ExtFloodFill在指定的设备场景里,用当前选择的刷子填充一个区域

FillPath关闭路径中任何打开的图形,并用当前刷子填充

FillRect用指定的刷子填充一个矩形

FlattenPath将一个路径中的所有曲线都转换成线段

FloodFill用当前选定的刷子在指定的设备场景中填充一个区域

FrameRect用指定的刷子围绕一个矩形画一个边框

GdiComment为指定的增强型图元文件设备场景添加一条注释信息GdiFlush执行任何未决的绘图操作

GdiGetBatchLimit判断有多少个GDI绘图命令位于队列中GdiSetBatchLimit指定有多少个GDI绘图命令能够进入队列GetArcDirection画圆弧的时候,判断当前采用的绘图方向

GetBkColor取得指定设备场景当前的背景颜色

GetBkMode针对指定的设备场景,取得当前的背景填充模式GetBrushOrgEx判断指定设备场景中当前选定刷子起点GetCurrentObject获得指定类型的当前选定对象

GetCurrentPositionEx在指定的设备场景中取得当前的画笔位置GetEnhMetaFile取得磁盘文件中包含的一个增强型图元文件的图元文件句柄GetEnhMetaFileBits将指定的增强型图元文件复制到一个内存缓冲区里GetEnhMetaFileDescription返回对一个增强型图元文件的说明GetEnhMetaFileHeader取得增强型图元文件的图元文件头GetEnhMetaFilePaletteEntries取得增强型图元文件的全部或部分调色板GetMetaFile取得包含在一个磁盘文件中的图元文件的图元文件句柄GetMetaFileBitsEx将指定的图元文件复制到一个内存缓冲区GetMiterLimit取得设备场景的斜率限制(Miter)设置

GetNearestColor根据设备的显示能力,取得与指定颜色最接近的一种纯色GetObjectAPI取得对指定对象进行说明的一个结构

GetObjectType判断由指定句柄引用的GDI对象的类型

GetPath取得对当前路径进行定义的一系列数据

GetPixel在指定的设备场景中取得一个像素的RGB值

GetPolyFillMode针对指定的设备场景,获得多边形填充模式

GetROP2针对指定的设备场景,取得当前的绘图模式

GetStockObject取得一个固有对象(Stock)

GetSysColorBrush为任何一种标准系统颜色取得一个刷子

GetWinMetaFileBits通过在一个缓冲区中填充用于标准图元文件的数据,将一个增强型图元文件转换成标准windows图元文件

InvertRect通过反转每个像素的值,从而反转一个设备场景中指定的矩形

LineDDA枚举指定线段中的所有点

LineTo用当前画笔画一条线,从当前位置连到一个指定的点

-----------------------------------------

相关文档
最新文档