最近有点闲 發表於 2007-3-14 00:00:00

VB编程基础课教程

VB编程基础课 <BR>什么是API&nbsp;API文本游览器&nbsp; <BR>API函数声明&nbsp;数据类型与"类型安全"&nbsp; <BR>常&nbsp;数&nbsp;结&nbsp;构&nbsp; <BR>小&nbsp;结&nbsp;一些API函数集:&nbsp;控件与消息函数、硬件与系统函数、菜单函数、绘图函数&nbsp; <BR>什么是API&nbsp;&nbsp; <BR>首先,有必要向大家讲一讲,什么是API。所谓API本来是为C和C++程序员写的。API说来说去,就是一种函数,他们包含在一个附加名为DLL的动态连接库文件中。用标准的定义来讲,API就是Windows的32位应用程序编程接口,是一系列很复杂的函数,消息和结构,它使编程人员可以用不同类型的编程语言编制出的运行在Windows95和Windows&nbsp;NT操作系统上的应用程序。可以说,如果你曾经学过VC,那么API对你来说不是什么问题。但是如果你没有学过VC,或者你对Windows95的结构体系不熟悉,那么可以说,学习API将是一件很辛苦的事情。 <BR>如果你打开WINDOWS的SYSTEM文件夹,你可以发现其中有很多附加名为DLL的文件。一个DLL中包含的API函数并不只是一个,数十个,甚至是数百个。我们能都掌握它嘛?回答是否定的∶不可能掌握。但实际上,我们真的没必要都掌握,只要重点掌握Windos系统本身自带的API函数就可以了。但,在其中还应当抛开掉同VB本身自有的函数重复的函数。如,VB <BR>的etAttr命令可以获得文件属性,SetAttr可以设置文件属性。对API来讲也有对应的函数 <BR>GetFileAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下来的也就5、600个。是的,也不少。但,我可以敢跟你说,只要你熟悉地掌握100个,那么你的编程水平比现在高出至少要两倍。尽管人们说VB和WINDOWS具有密切的关系,但我认为,API更接近 <BR>WINDOWS。如果你学会了API,首要的收获便是对WINDOWS体系结构的认识。这个收获是来自不易的。 <BR>如果你不依靠API会怎么样?我可以跟你说,绝大多是高级编程书本(当然这不是书的名程叫高级而高级的,而是在一开始的《本书内容》中指明《本书的阅读对象是具有一定VB基础的读者》的那些书),首先提的问题一般大都是从API开始。因此可以说,你不学API,你大概将停留在初级水平,无法往上攀登。唯一的途径也许就是向别人求救∶我快死了,快来救救我呀,这个怎么办,那个怎么办?烦不烦呢?当然,现在网上好人太多(包括我在内,嘻嘻),但,你应当明白,通过此途径,你的手中出不了好的作品。这是因为缺乏这些知识你的脑子里根本行不成一种总体的设计构思。&nbsp; <BR>API文本游览器&nbsp;[返回] <BR>很多API函数都是很长很长的。想看什么样子吗?如下就是作为例子的API&nbsp;DdeClientTransaction函数∶ <BR>Declare&nbsp;Function&nbsp;DdeClientTransaction&nbsp;Lib&nbsp;"user32"&nbsp;(pData&nbsp;As&nbsp;Byte,&nbsp;ByVal&nbsp;cbData&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;hConv&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;hszItem&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;wFmt&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;wType&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;dwTimeout&nbsp;As&nbsp;Long,&nbsp;pdwResult&nbsp;As&nbsp;Long)&nbsp;As&nbsp;Long <BR>哇!这么长?如果你从来没有接触过API,我想你肯定被吓住了。你也许考虑,该不该继续学下去。不过不要担心,幸运的是Microsoft的设计家们为我们提供了有用的工具,这便是API <BR>文本查看器。 <BR>通过API文本查看器,我们可以方便地查找程序所需要的函数声明、结构类型和常数,然后将它复制到剪贴板,最后再粘贴到VB程序的代码段中。在大多数情况下,只要我们确定了程序所需要的函数、结构和常数这三个方面后,就可以通过对API文本游览器的以上操作将他们加入到程序段中,从而程序中可以使用这些函数了。这些是学习API最基本的常识问题,它远远占不到API的庞大的体系内容。今后我们把精力浪费(这绝不是浪费)在哪里呢?那就是∶ <BR>什么时候使用什么函数,什么时候使用什么结构类型,什么时候使用什么常数。&nbsp; <BR>API函数声明&nbsp; <BR>让我们回想一下。在VB中,如何声明函数呢?我想,如果你正在看此文,那么你绝对能够回答得出这个问题。以下便是你应该很熟悉的函数声明∶ <BR>Function&nbsp;SetFocus&nbsp;(ByVal&nbsp;hwnd&nbsp;As&nbsp;Long)&nbsp;As&nbsp;Long <BR>即,这行代码定义了名为SetFocus的函数,此函数具有一个Long型数据类型的参数,并按值传递(ByVal),函数执行后将返回一个Long型数据。 <BR>API函数的声明也很类似,如,API中的SetFocus&nbsp;函数是这样写的∶ <BR>Declare&nbsp;Function&nbsp;SetFocus&nbsp;Lib&nbsp;"user32"&nbsp;Alias&nbsp;"SetFocus"&nbsp;(ByVal&nbsp;hwnd&nbsp;As&nbsp;Long)&nbsp;As&nbsp;Long <BR>有点复杂了一些。是的,是复杂了点。但我可以告诉你,除了这些多出来的部分,其他部分还是和你以前学到的东西是一样的。函数在程序中的调用也是一样。如: <BR>Dim&nbsp;dl&nbsp;As&nbsp;Long <BR>dl&amp;=SetFoucs(Form1.Hwnd) <BR>但,一点是清楚的。它不象你自己写的程序那样能够看到里面的运行机理,也不像VB <BR>自带的函数那样,能够从VB的联机帮助中查到其用法。唯一的方法就是去学、查VB以外的资料。 <BR>Declare&nbsp;语句用于在模块级别中声明对动态链接库&nbsp;(DLL)&nbsp;中外部过程的引用。对此,你只要记住任何API函数声明都必须写这个语句就可以了。 <BR>Iib&nbsp;指明包含所声明过程或函数的动态链接库或代码资源。也就是说,它说明的是,函数或过程从何而来的问题。 <BR>如在上例中,SetFocus&nbsp;Lib&nbsp;"user32"说明&nbsp;函数&nbsp;SetFocus&nbsp;来自&nbsp;user32.dll文件。主要的dll动态连接库文件有∶ <BR>user32.dll&nbsp;Windows管理。生成和管理应用程序的用户接口。 <BR>GDI32.dll&nbsp;图形设备接口。产生Windows设备的图形输出 <BR>Kernel32.dll&nbsp;系统服务。访问操作系统的计算机资源。 <BR>注意,当DLL文件不在Windows或System文件夹中的时候,必须在函数中说明其出处( <BR>路径)。如,SetFocus&nbsp;Lib&nbsp;"c:\Mydll\user32" <BR>函数声明中的Alias&nbsp;是可选的。表示将被调用的过程在动态链接库&nbsp;(DLL)&nbsp;中还有另外的名称(别名)。如,Alias&nbsp;"SetFocus"&nbsp;,说明SetFocus函数在User32.dll中的另外一个名称是, <BR>SetFocus。怎么两个名都一样呢?当然,也可以是不同的。在很多情况下,Alias说明的函数名,即别名最后一个字符经常是字符A,如SetWindowsText函数的另一个名称是 <BR>SetWindowsTextA,表示为Alias&nbsp;"SetWindowsTextA"。这个A只不过是设计家们的习惯的命名约定,表示函数属于ANSI版本。 <BR>那么,别名究竟有什么用途呢?从理论上讲,别名提供了用另一个名子调用API的函数方法。如果你指明了别名,那么&nbsp;尽管我们按Declare语句后面的函数来调用该函数,但在函数的实际调用上是以别名作为首要选择的。如,以下两个函数(Function,ABCD)声明都是有效的,他们调用的是同一个&nbsp;SetFocus函数∶ <BR>Declare&nbsp;Function&nbsp;SetFocus&nbsp;Lib&nbsp;"user32"&nbsp;"SetFocus"&nbsp;(ByVal&nbsp;hwnd&nbsp;As&nbsp;Long)&nbsp;As&nbsp;Long <BR>Declare&nbsp;ABCD&nbsp;SetFocus&nbsp;Lib&nbsp;"user32"&nbsp;Alias&nbsp;"SetFocus"&nbsp;(ByVal&nbsp;hwnd&nbsp;As&nbsp;Long)&nbsp;As&nbsp;Long <BR>需要注意的是,选用Alias的时候,应注意别名的大小写;如果不选用Alias&nbsp;时的时候,函数名必须注意大小写,而且不能改动。当然,在很多情况下,由于函数声明是直接从API <BR>文本游览器中拷贝过来的,所以这种错误的发生机会是很少的,但您有必要知道这一点。 <BR>最后提醒你一句,API声明(包括结构、常数)必须放在窗体或模块的"通用(General&nbsp;Declarations)段。&nbsp; <BR>数据类型与"类型安全"&nbsp; <BR>API函数中使用的数据类型基本上和VB中的一样。但作为WIN32的API函数中,不存在Integer <BR>数据类型。另外一点是在API函数中看不到Boolean数据类型。&nbsp;Variant数据类型在API函数中是以Any的形式出现,如Data&nbsp;As&nbsp;Any。尽管其含义是允许任意参数类型作为一个该API函数的参数传递,但这样做存在一定的缺点。其原因是,这将会使得对目标参数的所有类型检查都会被关闭。这自然会给各种类型的参数调用带来了产生错误的机会。 <BR>为了强制执行严格的类型检查,并避免上面提到的问题,一个办法是在函数里使用上面提到到Alias技术。如对API函数&nbsp;GetDIBits&nbsp;可进行另外一种声明方法。如下∶ <BR>GetDIBits函数的原型∶ <BR>Public&nbsp;Declare&nbsp;Function&nbsp;GetDIBits&nbsp;Lib&nbsp;"gdi32"&nbsp;Alias&nbsp;"GetDIBits"&nbsp;(ByVal&nbsp;aHDC&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;hBitmap&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;nStartScan&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;nNumScans&nbsp;As&nbsp;Long,&nbsp;lpBits&nbsp;As&nbsp;Any,&nbsp;lpBI&nbsp;As&nbsp;BITMAPINFO,&nbsp;ByVal&nbsp;wUsage&nbsp;As&nbsp;Long)&nbsp;As&nbsp;Long <BR>GetDIBits函数的改型∶ <BR>Public&nbsp;Declare&nbsp;Function&nbsp;GetDIBitsLong&nbsp;Lib&nbsp;"gdi32"&nbsp;Alias&nbsp;"GetDIBits"&nbsp;(ByVal&nbsp;aHDC&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;hBitmap&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;nStartScan&nbsp;As&nbsp;Long,&nbsp;ByVal&nbsp;nNumScans&nbsp;As&nbsp;Long,&nbsp;lpBits&nbsp;As&nbsp;Long,&nbsp;lpBI&nbsp;As&nbsp;BITMAPINFO,&nbsp;ByVal&nbsp;wUsage&nbsp;As&nbsp;Long)&nbsp;As&nbsp;Long <BR>通过本课程前面所学到的知识,我们已经可以得知原型&nbsp;GetDIBits函数也好,改型&nbsp;GetDIBitsLong函数也好,实际将调用的都是Alias所指定的&nbsp;GetDIBits原函数。但你应当看到,两者的区别在于,我们在改型的函数中强制指定lpBits参数为Long形。这样就会使得函数调用中发生的错误机率减少到了最小。这种方法叫做"安全类型"声明。 <BR>API函数中经常看到的数据类型有∶Long,String,Byte,Any....(也就这些吧。)&nbsp; <BR>常&nbsp;数&nbsp; <BR>对于API常数来讲,没有什么太特别的学问。请看VB中的以下代码∶ <BR>Msg&nbsp;=&nbsp;MsgBox("您好",&nbsp;vbOKCancel) <BR>我们知道,&nbsp;vbOKCancel这个常数的值等于1。对上面的代码我们完全可以这样写,而不会影响代码的功能∶ <BR>Msg&nbsp;=&nbsp;MsgBox("您好",&nbsp;1) <BR>但你大概不太愿意选择后一种,因为这会使得看懂代码费劲起来。这种方法也被API采取了。只是API常数必须在事情之前做好初始化声明VB本身是看不懂的。其内容仍然来自与API <BR>文本游览器。具体形式如下等等∶ <BR>Public&nbsp;Const&nbsp;ABM_ACTIVATE&nbsp;=&nbsp;&amp;H6&nbsp; <BR>Public&nbsp;Const&nbsp;RIGHT_CTRL_PRESSED&nbsp;=&nbsp;&amp;H4&nbsp; <BR>Public&nbsp;Const&nbsp;RPC_E_SERVER_DIED&nbsp;=&nbsp;&amp;H80010007 <BR>Private&nbsp;Const&nbsp;RPC_S_CALL_FAILED_DNE&nbsp;=&nbsp;1727&amp;&nbsp; <BR>在常数的初始化中,有些程序使用Global,如Global&nbsp;Const&nbsp;ABM_ACTIVATE&nbsp;=&nbsp;&amp;H6,但我认为Public完全可以代替它。过去我也用过Global,但现在不大用了。一会儿用这个,一会儿用那个,各程序之间不能保持一致性了,起码看起来别扭。&nbsp; <BR>结&nbsp;构&nbsp;[返回] <BR>结构是C和C++语言中的说法。在VB中一般称为自定义数据类型。想必很多朋友都已经认识它。在API领域里,我更喜欢把它叫做结构,因为API各种结构类型根本不是我定义( <BR>自定义)的。 <BR>在VB中,API结构同样由TYPE.......END&nbsp;TYPE语句来定义。如,在API中,点(Point)结构的定义方法如下: <BR>Public&nbsp;Type&nbsp;POINTAPI <BR>X&nbsp;As&nbsp;Long&nbsp;'点在X坐标(横坐标)上的坐标值 <BR>Y&nbsp;As&nbsp;Long&nbsp;'点在Y坐标(纵坐标)上的坐标值 <BR>End&nbsp;Type <BR>又如,API中矩形(Rect)结构的定义如下∶ <BR>Public&nbsp;Type&nbsp;RECT <BR>Left&nbsp;As&nbsp;Long&nbsp;'矩形左上角的X坐标 <BR>Top&nbsp;As&nbsp;Long&nbsp;'矩形左上角的Y坐标 <BR>Right&nbsp;As&nbsp;Long&nbsp;'矩形右下角的X坐标 <BR>Bottom&nbsp;As&nbsp;Long&nbsp;'矩形右下角的Y坐标 <BR>End&nbsp;Type <BR>这些内容同样可以从API文本游览器中拷贝过来。这些结构中的变量名可随意改动,而不会影响结构本身。也就是说,这些成员变量都是虚拟的。如,POINTAPI结构可改为如下∶ <BR>Public&nbsp;Type&nbsp;POINTAPI <BR>MyX&nbsp;As&nbsp;Long&nbsp;'点在X坐标(横坐标)上的坐标值 <BR>MyY&nbsp;As&nbsp;Long&nbsp;'点在Y坐标(纵坐标)上的坐标值 <BR>End&nbsp;Type <BR>不过,一般来讲,是没有这种必要的。结构本身是一种数据类型,因此,使用时必须声明具体变量为该结构型,才能在程序中真正使用到该结构。结构的声明方法和其他数据的声明方法一样,如,以下语句把变MyPoint声明为POINTAPI结构类型∶ <BR>MyPoint&nbsp;As&nbsp;POINTAPI <BR>引用结构中的成员变量也十分简单,在结构名后面加上一个".",然后紧接着写要引用的成员变量即可。这很象VB中的引用一个对象的某个属性。如,假如我们把上面已经声明的MyPoint结构中的X变量的值赋给变量Temp&amp; <BR>则代码如下∶ <BR>Temp&amp;=MyPoint.X <BR>但,特别注意的是,你千万不要认为上例中的MyPoint是一个值。它不是值,而是地址( <BR>指针)。值和地址是完全不同的概念。结构要求按引用传递给WINDOWS函数,即所有API <BR>函数中,结构都是按ByRef传递的(在Declare语句&nbsp;中ByRef是默认型)。对于结构的传递,你不要试图采用ByVal,你将一无所获。由于结构名实际上就是指向这个结构的指针(这个结构的首地址),所以,你也就传送特定的结构名就可以了(参见小结,我用红色字体来突出了这种传递方式)。 <BR>由于结构传送的是指针,所以函数将直接对结构进行读写操作。这种特性很适合于把函数执行的结果装载在结构之中。&nbsp; <BR>小&nbsp;结&nbsp;[返回] <BR>以下的程序是为了总结本课中学到的内容而给出的。启动VB,新建一个项目,添加一个命令按钮,并把下面的代码拷贝到代码段中,运行它。&nbsp; <BR>Private&nbsp;Declare&nbsp;Function&nbsp;GetCursorPos&nbsp;Lib&nbsp;"user32"&nbsp;(lpPoint&nbsp;As&nbsp;POINTAPI)&nbsp;As&nbsp;Long <BR>Private&nbsp;Type&nbsp;POINTAPI&nbsp;'定义点(Point)结构 <BR>X&nbsp;As&nbsp;Long&nbsp;'点在X坐标(横坐标)上的坐标值 <BR>Y&nbsp;As&nbsp;Long&nbsp;'点在Y坐标(纵坐标)上的坐标值 <BR>End&nbsp;Type <BR>Sub&nbsp;PrintCursorPos(&nbsp;) <BR>Dim&nbsp;dl&nbsp;AS&nbsp;Long <BR>Dim&nbsp;MyPoint&nbsp;As&nbsp;POINTAPI <BR>dl&amp;=&nbsp;GetCursorPos(MyPoint)&nbsp;'调用函数,获取屏幕鼠标坐标 <BR>Debug.Print&nbsp;"X="&nbsp;&amp;&nbsp;Str(MyPoint.X)&nbsp;&amp;&nbsp;"&nbsp;and&nbsp;"&nbsp;&amp;&nbsp;"Y="&nbsp;&amp;&nbsp;Str(MyPoint.Y) <BR>End&nbsp;Sub <BR>Private&nbsp;Sub&nbsp;Command1_Click() <BR>PrintCursorPos <BR>End&nbsp;Sub <BR>输出结果为(每次运行都可能得到不同的结果,这得由函数调用时鼠标指针在屏幕中所处的位置而决定)∶ <BR>X=&nbsp;240&nbsp;and&nbsp;Y=&nbsp;151 <BR>程序中,GetCursorPos函数用来获取鼠标指针在屏幕上的位置。 <BR>以上例子中,你可以发现,以参数传递的MyPpint结构的内容在函数调用后发生了实质性变化。这是由于结构是按ByRef传递的原因。&nbsp; <BR>一些API函数集&nbsp;[返回] <BR>Windows&nbsp;API <BR>1.控件与消息函数&nbsp; <BR>AdjustWindowRect&nbsp;给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小&nbsp; <BR>AnyPopup&nbsp;判断屏幕上是否存在任何弹出式窗口&nbsp; <BR>ArrangeIconicWindows&nbsp;排列一个父窗口的最小化子窗口&nbsp; <BR>AttachThreadInput&nbsp;连接线程输入函数&nbsp; <BR>BeginDeferWindowPos&nbsp;启动构建一系列新窗口位置的过程&nbsp; <BR>BringWindowToTop&nbsp;将指定的窗口带至窗口列表顶部&nbsp; <BR>CascadeWindows&nbsp;以层叠方式排列窗口&nbsp; <BR>ChildWindowFromPoint&nbsp;返回父窗口中包含了指定点的第一个子窗口的句柄&nbsp; <BR>ClientToScreen&nbsp;判断窗口内以客户区坐标表示的一个点的屏幕坐标&nbsp; <BR>CloseWindow&nbsp;最小化指定的窗口&nbsp; <BR>CopyRect&nbsp;矩形内容复制&nbsp; <BR>DeferWindowPos&nbsp;该函数为特定的窗口指定一个新窗口位置&nbsp; <BR>DestroyWindow&nbsp;清除指定的窗口以及它的所有子窗口&nbsp; <BR>DrawAnimatedRects&nbsp;描绘一系列动态矩形&nbsp; <BR>EnableWindow&nbsp;指定的窗口里允许或禁止所有鼠标及键盘输入&nbsp; <BR>EndDeferWindowPos&nbsp;同时更新DeferWindowPos调用时指定的所有窗口的位置及状态 <BR>EnumChildWindows&nbsp;为指定的父窗口枚举子窗口&nbsp; <BR>EnumThreadWindows&nbsp;枚举与指定任务相关的窗口&nbsp; <BR>EnumWindows&nbsp;枚举窗口列表中的所有父窗口&nbsp; <BR>EqualRect&nbsp;判断两个矩形结构是否相同&nbsp; <BR>FindWindow&nbsp;寻找窗口列表中第一个符合指定条件的顶级窗口&nbsp; <BR>FindWindowEx&nbsp;在窗口列表中寻找与指定条件相符的第一个子窗口&nbsp; <BR>FlashWindow&nbsp;闪烁显示指定窗口&nbsp; <BR>GetActiveWindow&nbsp;获得活动窗口的句柄&nbsp; <BR>GetCapture&nbsp;获得一个窗口的句柄,这个窗口位于当前输入线程,且拥有鼠标捕获(鼠标活动由它接收)&nbsp; <BR>GetClassInfo&nbsp;取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本,结构中包含了与指定类有关的信息&nbsp; <BR>GetClassLong&nbsp;取得窗口类的一个Long变量条目&nbsp; <BR>GetClassName&nbsp;为指定的窗口取得类名&nbsp; <BR>GetClassWord&nbsp;为窗口类取得一个整数变量&nbsp; <BR>GetClientRect&nbsp;返回指定窗口客户区矩形的大小&nbsp; <BR>GetDesktopWindow&nbsp;获得代表整个屏幕的一个窗口(桌面窗口)句柄&nbsp; <BR>GetFocus&nbsp;获得拥有输入焦点的窗口的句柄 <BR>GetForegroundWindow&nbsp;获得前台窗口的句柄&nbsp; <BR>GetLastActivePopup&nbsp;获得在一个给定父窗口中最近激活过的弹出式窗口的句柄&nbsp; <BR>GetLastError&nbsp;针对之前调用的api函数,用这个函数取得扩展错误信息&nbsp; <BR>GetParent&nbsp;判断指定窗口的父窗口&nbsp; <BR>GetTopWindow&nbsp;搜索内部窗口列表,寻找隶属于指定窗口的头一个窗口的句柄&nbsp; <BR>GetUpdateRect&nbsp;获得一个矩形,它描叙了指定窗口中需要更新的那一部分&nbsp; <BR>GetWindow&nbsp;获得一个窗口的句柄,该窗口与某源窗口有特定的关系&nbsp; <BR>GetWindowContextHelpId&nbsp;取得与窗口关联在一起的帮助场景ID&nbsp; <BR>GetWindowLong&nbsp;从指定窗口的结构中取得信息&nbsp; <BR>GetWindowPlacement&nbsp;获得指定窗口的状态及位置信息&nbsp; <BR>GetWindowRect&nbsp;获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内&nbsp; <BR>GetWindowText&nbsp;取得一个窗体的标题(caption)文字,或者一个控件的内容&nbsp; <BR>GetWindowTextLength&nbsp;调查窗口标题文字或控件内容的长短&nbsp; <BR>GetWindowWord&nbsp;获得指定窗口结构的信息&nbsp; <BR>InflateRect&nbsp;增大或减小一个矩形的大小&nbsp; <BR>IntersectRect&nbsp;这个函数在lpDestRect里载入一个矩形,它是lpSrc1Rect与lpSrc2Rect两个矩形的交集 <BR>InvalidateRect&nbsp;屏蔽一个窗口客户区的全部或部分区域&nbsp; <BR>IsChild&nbsp;判断一个窗口是否为另一窗口的子或隶属窗口 <BR>IsIconic&nbsp;判断窗口是否已最小化&nbsp; <BR>IsRectEmpty&nbsp;判断一个矩形是否为空&nbsp; <BR>IsWindow&nbsp;判断一个窗口句柄是否有效&nbsp; <BR>IsWindowEnabled&nbsp;判断窗口是否处于活动状态&nbsp; <BR>IsWindowUnicode&nbsp;判断一个窗口是否为Unicode窗口。这意味着窗口为所有基于文本的消息都接收Unicode文字&nbsp; <BR>IsWindowVisible&nbsp;判断窗口是否可见&nbsp; <BR>IsZoomed&nbsp;判断窗口是否最大化&nbsp; <BR>LockWindowUpdate&nbsp;锁定指定窗口,禁止它更新&nbsp; <BR>MapWindowPoints&nbsp;将一个窗口客户区坐标的点转换到另一窗口的客户区坐标系统&nbsp; <BR>MoveWindow&nbsp;改变指定窗口的位置和大小&nbsp; <BR>OffsetRect&nbsp;通过应用一个指定的偏移,从而让矩形移动起来&nbsp; <BR>OpenIcon&nbsp;恢复一个最小化的程序,并将其激活&nbsp; <BR>PtInRect&nbsp;判断指定的点是否位于矩形内部&nbsp; <BR>RedrawWindow&nbsp;重画全部或部分窗口 <BR>ReleaseCapture&nbsp;为当前的应用程序释放鼠标捕获&nbsp; <BR>ScreenToClient&nbsp;判断屏幕上一个指定点的客户区坐标&nbsp; <BR>ScrollWindow&nbsp;滚动窗口客户区的全部或一部分&nbsp; <BR>ScrollWindowEx&nbsp;根据附加的选项,滚动窗口客户区的全部或部分&nbsp; <BR>SetActiveWindow&nbsp;激活指定的窗口&nbsp; <BR>SetCapture&nbsp;将鼠标捕获设置到指定的窗口&nbsp; <BR>SetClassLong&nbsp;为窗口类设置一个Long变量条目&nbsp; <BR>SetClassWord&nbsp;为窗口类设置一个条目&nbsp; <BR>SetFocusAPI&nbsp;将输入焦点设到指定的窗口。如有必要,会激活窗口&nbsp; <BR>SetForegroundWindow&nbsp;将窗口设为系统的前台窗口&nbsp; <BR>SetParent&nbsp;指定一个窗口的新父&nbsp; <BR>SetRect&nbsp;设置指定矩形的内容&nbsp; <BR>SetRectEmpty&nbsp;将矩形设为一个空矩形&nbsp; <BR>SetWindowContextHelpId&nbsp;为指定的窗口设置帮助场景(上下文)ID&nbsp; <BR>SetWindowLong&nbsp;在窗口结构中为指定的窗口设置信息&nbsp; <BR>SetWindowPlacement&nbsp;设置窗口状态和位置信息 <BR>SetWindowPos&nbsp;为窗口指定一个新位置和状态&nbsp; <BR>SetWindowText&nbsp;设置窗口的标题文字或控件的内容&nbsp; <BR>SetWindowWord&nbsp;在窗口结构中为指定的窗口设置信息&nbsp; <BR>ShowOwnedPopups&nbsp;显示或隐藏由指定窗口所有的全部弹出式窗口&nbsp; <BR>ShowWindow&nbsp;控制窗口的可见性&nbsp; <BR>ShowWindowAsync&nbsp;与ShowWindow相似&nbsp; <BR>SubtractRect&nbsp;装载矩形lprcDst,它是在矩形lprcSrc1中减去lprcSrc2得到的结果&nbsp; <BR>TileWindows&nbsp;以平铺顺序排列窗口&nbsp; <BR>UnionRect&nbsp;装载一个lpDestRect目标矩形,它是lpSrc1Rect和lpSrc2Rect联合起来的结果&nbsp; <BR>UpdateWindow&nbsp;强制立即更新窗口&nbsp; <BR>ValidateRect&nbsp;校验窗口的全部或部分客户区&nbsp; <BR>WindowFromPoint&nbsp;返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口 <BR>2.硬件与系统函数 <BR>ActivateKeyboardLayout&nbsp;激活一个新的键盘布局。键盘布局定义了按键在一种物理性键盘上的位置与含义&nbsp; <BR>Beep&nbsp;用于生成简单的声音&nbsp; <BR>CharToOem&nbsp;将一个字串从ANSI字符集转换到OEM字符集&nbsp; <BR>ClipCursor&nbsp;将指针限制到指定区域&nbsp; <BR>ConvertDefaultLocale&nbsp;将一个特殊的地方标识符转换成真实的地方ID&nbsp; <BR>CreateCaret&nbsp;根据指定的信息创建一个插入符(光标),并将它选定为指定窗口的默认插入符&nbsp; <BR>DestroyCaret&nbsp;清除(破坏)一个插入符&nbsp; <BR>EnumCalendarInfo&nbsp;枚举在指定“地方”环境中可用的日历信息&nbsp; <BR>EnumDateFormats&nbsp;列举指定的“当地”设置中可用的长、短日期格式&nbsp; <BR>EnumSystemCodePages&nbsp;枚举系统中已安装或支持的代码页&nbsp; <BR>EnumSystemLocales&nbsp;枚举系统已经安装或提供支持的“地方”设置&nbsp; <BR>EnumTimeFormats&nbsp;枚举一个指定的地方适用的时间格式&nbsp; <BR>ExitWindowsEx&nbsp;退出windows,并用特定的选项重新启动&nbsp; <BR>ExpandEnvironmentStrings&nbsp;扩充环境字串&nbsp; <BR>FreeEnvironmentStrings&nbsp;翻译指定的环境字串块&nbsp; <BR>GetACP&nbsp;判断目前正在生效的ANSI代码页 <BR>GetAsyncKeyState&nbsp;判断函数调用时指定虚拟键的状态&nbsp; <BR>GetCaretBlinkTime&nbsp;判断插入符光标的闪烁频率&nbsp; <BR>GetCaretPos&nbsp;判断插入符的当前位置&nbsp; <BR>GetClipCursor&nbsp;取得一个矩形,用于描述目前为鼠标指针规定的剪切区域&nbsp; <BR>GetCommandLine&nbsp;获得指向当前命令行缓冲区的一个指针&nbsp; <BR>GetComputerName&nbsp;取得这台计算机的名称&nbsp; <BR>GetCPInfo&nbsp;取得与指定代码页有关的信息&nbsp; <BR>GetCurrencyFormat&nbsp;针对指定的“地方”设置,根据货币格式格式化一个数字&nbsp; <BR>GetCursor&nbsp;获取目前选择的鼠标指针的句柄&nbsp; <BR>GetCursorPos&nbsp;获取鼠标指针的当前位置&nbsp; <BR>GetDateFormat&nbsp;针对指定的“当地”格式,对一个系统日期进行格式化&nbsp; <BR>GetDoubleClickTime&nbsp;判断连续两次鼠标单击之间会被处理成双击事件的间隔时间&nbsp; <BR>GetEnvironmentStrings&nbsp;为包含了当前环境字串设置的一个内存块分配和返回一个句柄&nbsp; <BR>GetEnvironmentVariable&nbsp;取得一个环境变量的值&nbsp; <BR>GetInputState&nbsp;判断是否存在任何待决(等待处理)的鼠标或键盘事件&nbsp; <BR>GetKBCodePage&nbsp;由GetOEMCP取代,两者功能完全相同 <BR>GetKeyboardLayout&nbsp;取得一个句柄,描述指定应用程序的键盘布局&nbsp; <BR>GetKeyboardLayoutList&nbsp;获得系统适用的所有键盘布局的一个列表&nbsp; <BR>GetKeyboardLayoutName&nbsp;取得当前活动键盘布局的名称&nbsp; <BR>GetKeyboardState&nbsp;取得键盘上每个虚拟键当前的状态&nbsp; <BR>GetKeyboardType&nbsp;了解与正在使用的键盘有关的信息&nbsp; <BR>GetKeyNameText&nbsp;在给出扫描码的前提下,判断键名&nbsp; <BR>GetKeyState&nbsp;针对已处理过的按键,在最近一次输入信息时,判断指定虚拟键的状态&nbsp; <BR>GetLastError&nbsp;针对之前调用的api函数,用这个函数取得扩展错误信息&nbsp; <BR>GetLocaleInfo&nbsp;取得与指定“地方”有关的信息&nbsp; <BR>GetLocalTime&nbsp;取得本地日期和时间&nbsp; <BR>GetNumberFormat&nbsp;针对指定的“地方”,按特定的格式格式化一个数字&nbsp; <BR>GetOEMCP&nbsp;判断在OEM和ANSI字符集间转换的windows代码页&nbsp; <BR>GetQueueStatus&nbsp;判断应用程序消息队列中待决(等待处理)的消息类型&nbsp; <BR>GetSysColor&nbsp;判断指定windows显示对象的颜色&nbsp; <BR>GetSystemDefaultLangID&nbsp;取得系统的默认语言ID&nbsp; <BR>GetSystemDefaultLCID&nbsp;取得当前的默认系统“地方” <BR>GetSystemInfo&nbsp;取得与底层硬件平台有关的信息&nbsp; <BR>GetSystemMetrics&nbsp;返回与windows环境有关的信息&nbsp; <BR>GetSystemPowerStatus&nbsp;获得与当前系统电源状态有关的信息&nbsp; <BR>GetSystemTime&nbsp;取得当前系统时间,这个时间采用的是“协同世界时间”(即UTC,也叫做GMT)格式&nbsp; <BR>GetSystemTimeAdjustment&nbsp;使内部系统时钟与一个外部的时钟信号源同步&nbsp; <BR>GetThreadLocale&nbsp;取得当前线程的地方ID&nbsp; <BR>GetTickCount&nbsp;用于获取自windows启动以来经历的时间长度(毫秒)&nbsp; <BR>GetTimeFormat&nbsp;针对当前指定的“地方”,按特定的格式格式化一个系统时间&nbsp; <BR>GetTimeZoneInformation&nbsp;取得与系统时区设置有关的信息&nbsp; <BR>GetUserDefaultLangID&nbsp;为当前用户取得默认语言ID&nbsp; <BR>GetUserDefaultLCID&nbsp;取得当前用户的默认“地方”设置&nbsp; <BR>GetUserName&nbsp;取得当前用户的名字&nbsp; <BR>GetVersion&nbsp;判断当前运行的Windows和DOS版本&nbsp; <BR>GetVersionEx&nbsp;取得与平台和操作系统有关的版本信息&nbsp; <BR>HideCaret&nbsp;在指定的窗口隐藏插入符(光标)&nbsp; <BR>IsValidCodePage&nbsp;判断一个代码页是否有效 <BR>IsValidLocale&nbsp;判断地方标识符是否有效&nbsp; <BR>keybd_event&nbsp;这个函数模拟了键盘行动&nbsp; <BR>LoadKeyboardLayout&nbsp;载入一个键盘布局&nbsp; <BR>MapVirtualKey&nbsp;根据指定的映射类型,执行不同的扫描码和字符转换&nbsp; <BR>MapVirtualKeyEx&nbsp;根据指定的映射类型,执行不同的扫描码和字符转换&nbsp; <BR>MessageBeep&nbsp;播放一个系统声音。系统声音的分配方案是在控制面板里决定的&nbsp; <BR>mouse_event&nbsp;模拟一次鼠标事件&nbsp; <BR>OemKeyScan&nbsp;判断OEM字符集中的一个ASCII字符的扫描码和Shift键状态&nbsp; <BR>OemToChar&nbsp;将OEM字符集的一个字串转换到ANSI字符集&nbsp; <BR>SetCaretBlinkTime&nbsp;指定插入符(光标)的闪烁频率&nbsp; <BR>SetCaretPos&nbsp;指定插入符的位置&nbsp; <BR>SetComputerName&nbsp;设置新的计算机名&nbsp; <BR>SetCursor&nbsp;将指定的鼠标指针设为当前指针&nbsp; <BR>SetCursorPos&nbsp;设置指针的位置&nbsp; <BR>SetDoubleClickTime&nbsp;设置连续两次鼠标单击之间能使系统认为是双击事件的间隔时间&nbsp; <BR>SetEnvironmentVariable&nbsp;将一个环境变量设为指定的值 <BR>SetKeyboardState&nbsp;设置每个虚拟键当前在键盘上的状态&nbsp; <BR>SetLocaleInfo&nbsp;改变用户“地方”设置信息&nbsp; <BR>SetLocalTime&nbsp;设置当前地方时间&nbsp; <BR>SetSysColors&nbsp;设置指定窗口显示对象的颜色&nbsp; <BR>SetSystemCursor&nbsp;改变任何一个标准系统指针&nbsp; <BR>SetSystemTime&nbsp;设置当前系统时间&nbsp; <BR>SetSystemTimeAdjustment&nbsp;定时添加一个校准值使内部系统时钟与一个外部的时钟信号源同步&nbsp; <BR>SetThreadLocale&nbsp;为当前线程设置地方&nbsp; <BR>SetTimeZoneInformation&nbsp;设置系统时区信息&nbsp; <BR>ShowCaret&nbsp;在指定的窗口里显示插入符(光标)&nbsp; <BR>ShowCursor&nbsp;控制鼠标指针的可视性&nbsp; <BR>SwapMouseButton&nbsp;决定是否互换鼠标左右键的功能&nbsp; <BR>SystemParametersInfo&nbsp;获取和设置数量众多的windows系统参数&nbsp; <BR>SystemTimeToTzSpecificLocalTime&nbsp;将系统时间转换成地方时间&nbsp; <BR>ToAscii&nbsp;根据当前的扫描码和键盘信息,将一个虚拟键转换成ASCII字符&nbsp; <BR>ToUnicode&nbsp;根据当前的扫描码和键盘信息,将一个虚拟键转换成Unicode字符 <BR>UnloadKeyboardLayout&nbsp;卸载指定的键盘布局&nbsp; <BR>VkKeyScan&nbsp;针对Windows字符集中一个ASCII字符,判断虚拟键码和Shift键的状态&nbsp; <BR>完 <BR>3.菜单函数 <BR>AppendMenu&nbsp;在指定的菜单里添加一个菜单项&nbsp; <BR>CheckMenuItem&nbsp;复选或撤消复选指定的菜单条目&nbsp; <BR>CheckMenuRadioItem&nbsp;指定一个菜单条目被复选成“单选”项目&nbsp; <BR>CreateMenu&nbsp;创建新菜单&nbsp; <BR>CreatePopupMenu&nbsp;创建一个空的弹出式菜单&nbsp; <BR>DeleteMenu&nbsp;删除指定的菜单条目&nbsp; <BR>DestroyMenu&nbsp;删除指定的菜单&nbsp; <BR>DrawMenuBar&nbsp;为指定的窗口重画菜单&nbsp; <BR>EnableMenuItem&nbsp;允许或禁止指定的菜单条目&nbsp; <BR>GetMenu&nbsp;取得窗口中一个菜单的句柄&nbsp; <BR>GetMenuCheckMarkDimensions&nbsp;返回一个菜单复选符的大小&nbsp; <BR>GetMenuContextHelpId&nbsp;取得一个菜单的帮助场景ID&nbsp; <BR>GetMenuDefaultItem&nbsp;判断菜单中的哪个条目是默认条目&nbsp; <BR>GetMenuItemCount&nbsp;返回菜单中条目(菜单项)的数量&nbsp; <BR>GetMenuItemID&nbsp;返回位于菜单中指定位置处的条目的菜单ID&nbsp; <BR>GetMenuItemInfo&nbsp;取得(接收)与一个菜单条目有关的特定信息 <BR>GetMenuItemRect&nbsp;在一个矩形中装载指定菜单条目的屏幕坐标信息&nbsp; <BR>GetMenuState&nbsp;取得与指定菜单条目状态有关的信息&nbsp; <BR>GetMenuString&nbsp;取得指定菜单条目的字串&nbsp; <BR>GetSubMenu&nbsp;取得一个弹出式菜单的句柄,它位于菜单中指定的位置&nbsp; <BR>GetSystemMenu&nbsp;取得指定窗口的系统菜单的句柄&nbsp; <BR>HiliteMenuItem&nbsp;控制顶级菜单条目的加亮显示状态&nbsp; <BR>InsertMenu&nbsp;在菜单的指定位置处插入一个菜单条目,并根据需要将其他条目向下移动&nbsp; <BR>InsertMenuItem&nbsp;插入一个新菜单条目&nbsp; <BR>IsMenu&nbsp;判断指定的句柄是否为一个菜单的句柄&nbsp; <BR>LoadMenu&nbsp;从指定的模块或应用程序实例中载入一个菜单&nbsp; <BR>LoadMenuIndirect&nbsp;载入一个菜单&nbsp; <BR>MenuItemFromPoint&nbsp;判断哪个菜单条目包含了屏幕上一个指定的点&nbsp; <BR>ModifyMenu&nbsp;改变菜单条目&nbsp; <BR>RemoveMenu&nbsp;删除指定的菜单条目&nbsp; <BR>SetMenu&nbsp;设置窗口菜单&nbsp; <BR>SetMenuContextHelpId&nbsp;设置一个菜单的帮助场景ID <BR>SetMenuDefaultItem&nbsp;将一个菜单条目设为默认条目&nbsp; <BR>SetMenuItemBitmaps&nbsp;设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√)&nbsp; <BR>SetMenuItemInfo&nbsp;为一个菜单条目设置指定的信息&nbsp; <BR>TrackPopupMenu&nbsp;在屏幕的任意地方显示一个弹出式菜单&nbsp; <BR>TrackPopupMenuEx&nbsp;与TrackPopupMenu相似,只是它提供了额外的功能&nbsp; <BR>完 <BR>以下是几个关于菜单函数的类型定义&nbsp; <BR>MENUITEMINFO&nbsp;这个结构包含了菜单条目的信息&nbsp; <BR>TPMPARAMS&nbsp;这个结构用于TrackPopupMenuEx函数以支持额外的功能 <BR>4.绘图函数 <BR>AbortPath&nbsp;抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作&nbsp; <BR>AngleArc&nbsp;用一个连接弧画一条线&nbsp; <BR>Arc&nbsp;画一个圆弧&nbsp; <BR>BeginPath&nbsp;启动一个路径分支&nbsp; <BR>CancelDC&nbsp;取消另一个线程里的长时间绘图操作&nbsp; <BR>Chord&nbsp;画一个弦&nbsp; <BR>CloseEnhMetaFile&nbsp;关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄&nbsp; <BR>CloseFigure&nbsp;描绘到一个路径时,关闭当前打开的图形&nbsp; <BR>CloseMetaFile&nbsp;关闭指定的图元文件设备场景,并向新建的图元文件返回一个句柄&nbsp; <BR>CopyEnhMetaFile&nbsp;制作指定增强型图元文件的一个副本(拷贝)&nbsp; <BR>CopyMetaFile&nbsp;制作指定(标准)图元文件的一个副本&nbsp; <BR>CreateBrushIndirect&nbsp;在一个LOGBRUSH数据结构的基础上创建一个刷子&nbsp; <BR>CreateDIBPatternBrush&nbsp;用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案)&nbsp; <BR>CreateEnhMetaFile&nbsp;创建一个增强型的图元文件设备场景&nbsp; <BR>CreateHatchBrush&nbsp;创建带有阴影图案的一个刷子&nbsp; <BR>CreateMetaFile&nbsp;创建一个图元文件设备场景 <BR>CreatePatternBrush&nbsp;用指定了刷子图案的一幅位图创建一个刷子&nbsp; <BR>CreatePen&nbsp;用指定的样式、宽度和颜色创建一个画笔&nbsp; <BR>CreatePenIndirect&nbsp;根据指定的LOGPEN结构创建一个画笔&nbsp; <BR>CreateSolidBrush&nbsp;用纯色创建一个刷子&nbsp; <BR>DeleteEnhMetaFile&nbsp;删除指定的增强型图元文件&nbsp; <BR>DeleteMetaFile&nbsp;删除指定的图元文件&nbsp; <BR>DeleteObject&nbsp;删除GDI对象,对象使用的所有系统资源都会被释放&nbsp; <BR>DrawEdge&nbsp;用指定的样式描绘一个矩形的边框&nbsp; <BR>DrawEscape&nbsp;换码(Escape)函数将数据直接发至显示设备驱动程序&nbsp; <BR>DrawFocusRect&nbsp;画一个焦点矩形&nbsp; <BR>DrawFrameControl&nbsp;描绘一个标准控件&nbsp; <BR>DrawState&nbsp;为一幅图象或绘图操作应用各式各样的效果&nbsp; <BR>Ellipse&nbsp;描绘一个椭圆,由指定的矩形围绕&nbsp; <BR>EndPath&nbsp;停止定义一个路径&nbsp; <BR>EnumEnhMetaFile&nbsp;针对一个增强型图元文件,列举其中单独的图元文件记录&nbsp; <BR>EnumMetaFile&nbsp;为一个标准的windows图元文件枚举单独的图元文件记录 <BR>EnumObjects&nbsp;枚举可随同指定设备场景使用的画笔和刷子&nbsp; <BR>ExtCreatePen&nbsp;创建一个扩展画笔(装饰或几何)&nbsp; <BR>ExtFloodFill&nbsp;在指定的设备场景里,用当前选择的刷子填充一个区域&nbsp; <BR>FillPath&nbsp;关闭路径中任何打开的图形,并用当前刷子填充&nbsp; <BR>FillRect&nbsp;用指定的刷子填充一个矩形&nbsp; <BR>FlattenPath&nbsp;将一个路径中的所有曲线都转换成线段&nbsp; <BR>FloodFill&nbsp;用当前选定的刷子在指定的设备场景中填充一个区域&nbsp; <BR>FrameRect&nbsp;用指定的刷子围绕一个矩形画一个边框&nbsp; <BR>GdiComment&nbsp;为指定的增强型图元文件设备场景添加一条注释信息&nbsp; <BR>GdiFlush&nbsp;执行任何未决的绘图操作&nbsp; <BR>GdiGetBatchLimit&nbsp;判断有多少个GDI绘图命令位于队列中&nbsp; <BR>GdiSetBatchLimit&nbsp;指定有多少个GDI绘图命令能够进入队列&nbsp; <BR>GetArcDirection&nbsp;画圆弧的时候,判断当前采用的绘图方向&nbsp; <BR>GetBkColor&nbsp;取得指定设备场景当前的背景颜色&nbsp; <BR>GetBkMode&nbsp;针对指定的设备场景,取得当前的背景填充模式&nbsp; <BR>GetBrushOrgEx&nbsp;判断指定设备场景中当前选定刷子起点 <BR>GetCurrentObject&nbsp;获得指定类型的当前选定对象&nbsp; <BR>GetCurrentPositionEx&nbsp;在指定的设备场景中取得当前的画笔位置&nbsp; <BR>GetEnhMetaFile&nbsp;取得磁盘文件中包含的一个增强型图元文件的图元文件句柄&nbsp; <BR>GetEnhMetaFileBits&nbsp;将指定的增强型图元文件复制到一个内存缓冲区里&nbsp; <BR>GetEnhMetaFileDescription&nbsp;返回对一个增强型图元文件的说明&nbsp; <BR>GetEnhMetaFileHeader&nbsp;取得增强型图元文件的图元文件头&nbsp; <BR>GetEnhMetaFilePaletteEntries&nbsp;取得增强型图元文件的全部或部分调色板&nbsp; <BR>GetMetaFile&nbsp;取得包含在一个磁盘文件中的图元文件的图元文件句柄&nbsp; <BR>GetMetaFileBitsEx&nbsp;将指定的图元文件复制到一个内存缓冲区&nbsp; <BR>GetMiterLimit&nbsp;取得设备场景的斜率限制(Miter)设置&nbsp; <BR>GetNearestColor&nbsp;根据设备的显示能力,取得与指定颜色最接近的一种纯色&nbsp; <BR>GetObjectAPI&nbsp;取得对指定对象进行说明的一个结构&nbsp; <BR>GetObjectType&nbsp;判断由指定句柄引用的GDI对象的类型&nbsp; <BR>GetPath&nbsp;取得对当前路径进行定义的一系列数据&nbsp; <BR>GetPixel&nbsp;在指定的设备场景中取得一个像素的RGB值&nbsp; <BR>GetPolyFillMode&nbsp;针对指定的设备场景,获得多边形填充模式 <BR>GetROP2&nbsp;针对指定的设备场景,取得当前的绘图模式&nbsp; <BR>GetStockObject&nbsp;取得一个固有对象(Stock)&nbsp; <BR>GetSysColorBrush&nbsp;为任何一种标准系统颜色取得一个刷子&nbsp; <BR>GetWinMetaFileBits&nbsp;通过在一个缓冲区中填充用于标准图元文件的数据,将一个增强型图元文件转换成标准windows图元文件&nbsp; <BR>InvertRect&nbsp;通过反转每个像素的值,从而反转一个设备场景中指定的矩形&nbsp; <BR>LineDDA&nbsp;枚举指定线段中的所有点&nbsp; <BR>LineTo&nbsp;用当前画笔画一条线,从当前位置连到一个指定的点 <BR>
                           
                            <div class="art_xg">
                              
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: VB编程基础课教程