展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > VB编程基础课教程

VB编程基础课教程

API是Windows系统DLL文件中的预定义函数集合,是32位应用程序编程接口。掌握API能帮助理解Windows体系结构,提升编程水平。API声明需用Declare语句指定所在DLL文件和别名。数据类型与VB类似,但注意类型安全。常数和结构需预先声明,结构按引用传递。

本文目录

    先从最基础的讲起。很多接触VB编程的朋友,迟早会遇到一个绕不开的名词——API。这到底是什么?说穿了,API就是一组预先写好的函数,它们藏在Windows系统目录下那些以DLL为后缀的动态链接库文件里。标准定义是:API是Windows的32位应用程序编程接口,包含一系列相当复杂的函数、消息和结构,它让不同编程语言写出来的程序,都能在Windows 95和NT上跑起来。

    如果你以前学过VC,那API对你来说不算陌生。但如果你对Windows的体系结构不太熟悉,那学习API确实会是一件挺辛苦的事。

    打开Windows的System文件夹,你会看到一大堆DLL文件。别以为一个DLL里就只有一个函数——几十个甚至几百个都很常见。我们能把它们全掌握吗?答案很明确:不可能,也没那个必要。关键是要抓住Windows系统自带的那些API,同时把那些和VB自带函数重复的剔除掉。举个例子,VB的GetAttr和SetAttr能读写文件属性,API里对应的GetFileAttributes和SetFileAttributes功能也差不多。这么一筛选,剩下来的大概还有五六百个。看起来还是不少,但可以确定的是,只要你扎实掌握其中一百个,编程水平就能比现在高出一大截。

    话说回来,API和VB哪个更贴近Windows?答案是API。学会API,最大的收获不是多背了几个函数名,而是真正开始理解Windows的体系结构——这个收获确实来之不易。

    如果不靠API,你会遇到什么情况?市面上几乎所有的高级编程书——注意,不是名字叫“高级”才算数,而是那些在序言里写着“本书面向有一定VB基础的读者”的书——它们开篇讨论的,往往都是从API开始的。换句话说,不学API,你可能就卡在初级水平,很难再往上走。唯一的出路可能就是到处求人:“这个怎么办?那个怎么弄?”虽然现在网上愿意帮忙的人不少,但说实话,靠这种方式是出不了好作品的。因为你脑子里缺少全局的设计思路,这才是根本问题。

    API文本游览器

    很多API函数的名称长得吓人。不信?来看看DdeClientTransaction这个函数:

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

    哇,这么长?第一次接触的话,可能不少人会被吓住,甚至开始犹豫要不要继续学下去。不过不用慌,有个好东西能帮上大忙——API文本查看器。

    通过API文本查看器,你可以很方便地查找程序需要的函数声明、结构类型和常数,然后直接复制到剪贴板,再粘贴到VB的代码段里。大多数情况下,只要你确定了这三个要素——函数、结构、常数——就能通过这个工具把它们加入程序,然后正常使用。当然,这只是API的入门操作,远不是它的全部。真正需要花功夫琢磨的是:什么时候该用什么函数,什么时候该用什么结构,什么时候该用什么常数。

    API函数声明

    先回想一下,在VB里怎么声明一个函数?如果你正在看这篇文章,应该能轻松回答这个问题。比如:

    Function SetFocus (ByVal hwnd As Long) As Long

    这行代码定义了一个名为SetFocus的函数,它接受一个Long型的参数(按值传递),返回一个Long型结果。

    API函数的声明长得差不多,但稍微复杂一点。比如API版的SetFocus是这样写的:

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

    看起来复杂了一些对吧?但除了多出来的那几部分,其他还是老样子。调用方式也一样:

    Dim dl As Long
    dl = SetFocus(Form1.hwnd)

    不过有一点很清楚:API函数不像你自己写的代码那样能看到内部逻辑,也不像VB自带的函数那样能从联机帮助里查到用法。唯一的方法就是去学、去查VB以外的资料。

    Declare语句用来在模块级别声明对DLL中外部过程的引用。记住一点:任何API函数的声明都必须以Declare开头。

    Lib指明函数来自哪个DLL文件。比如SetFocus Lib "user32"说明它来自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。当然,也可能不同——很多情况下,别名末尾会有一个字母“A”,比如SetWindowsTextA,表示这是ANSI版本。这只是设计者们的习惯命名。

    别名到底有什么用?简单说,它允许你用一个不同的名字来调用同一个API函数。如果你指定了别名,虽然你在代码里按Declare后面的函数名调用,但实际执行时会优先用别名。下面两个声明都是有效的,调用的其实是同一个函数:

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

    有一点需要注意:如果用Alias,要留意别名的大小写;如果不使用Alias,函数名本身的大小写必须准确,不能随意改动。当然,大多数情况下函数声明是从API文本游览器直接拷贝的,这种错误发生的几率很小,但了解总没坏处。

    最后提醒一句:API声明(包括结构、常数)必须放在窗体或模块的“通用”(General Declarations)段。

    数据类型与“类型安全”

    API函数里用的数据类型和VB大致相同。但Win32的API里没有Integer数据类型,也看不到Boolean。VB里的Variant类型在API里会以Any的形式出现,比如Data As Any。虽然这么写意味着可以传任意类型的参数,但这有个隐患——它会关闭对目标参数的所有类型检查,容易给各种类型的参数调用带来错误。

    为了强制执行严格的类型检查,避免上述问题,可以用前面提到的Alias技术。来看GetDIBits函数的两种声明方式:

    原型声明:
    Public Declare Function GetDIBits Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long

    改型声明:
    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

    通过之前的知识可以判断,不管用原型还是改型,实际调用的都是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中的点(Point)结构:

    Public Type POINTAPI
    X As Long '点在X坐标上的值
    Y As Long '点在Y坐标上的值
    End Type

    再比如矩形(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
    MyY As Long
    End Type

    不过,通常没有这个必要。

    结构本身就是一种数据类型,所以在用之前需要先声明一个变量为该结构类型。声明方法和普通数据一样:

    Dim MyPoint As POINTAPI

    引用结构里的成员变量也很简单——在结构名后面加一个点,然后写成员变量名。这很像VB里引用对象的某个属性。比如把MyPoint里的X值赋给Temp&:

    Temp& = MyPoint.X

    但要特别留意:别以为上面的MyPoint是一个“值”——它其实是一个地址(指针)。值和地址是完全不同的概念。结构要求按引用传递给Windows函数,也就是说,所有API函数里的结构都是按ByRef传递的(这在Declare语句里是默认值)。不要试图用ByVal传结构,那样什么都拿不到。因为结构名本身就是指向这个结构的指针(也就是结构的首地址),所以你只需要传结构名就行。

    由于传的是指针,函数会直接对结构进行读写操作。这个特性很适合用来把函数执行的结果装进结构里。

    小结

    下面这个例子是为了总结本课内容。启动VB,新建一个项目,加一个命令按钮,把下面的代码拷贝进去,运行看看:

    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
    X As Long
    Y As Long
    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= 240 and Y= 151

    在这个例子里,GetCursorPos函数用来获取鼠标指针在屏幕上的位置。你会发现,作为参数传递的MyPoint结构,在函数调用之后内容发生了实质性的变化——这正是因为结构是按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:取得窗体的标题文字或控件的内容
    • GetWindowTextLength:调查窗口标题文字或控件内容的长度
    • GetWindowWord:获得指定窗口结构的信息
    • InflateRect:增大或减小一个矩形的大小
    • IntersectRect:在lpDestRect里载入一个矩形,它是lpSrc1Rect与lpSrc2Rect两个矩形的交集
    • InvalidateRect:屏蔽一个窗口客户区的全部或部分区域
    • IsChild:判断一个窗口是否为另一窗口的子或隶属窗口
    • IsIconic:判断窗口是否已最小化
    • IsRectEmpty:判断一个矩形是否为空
    • IsWindow:判断一个窗口句柄是否有效
    • IsWindowEnabled:判断窗口是否处于活动状态
    • IsWindowUnicode:判断一个窗口是否为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:将指针限制到指定区域
    • 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:换码函数,将数据直接发至显示设备驱动程序
    • 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:取得设备场景的斜率限制设置
    • GetNearestColor:根据设备显示能力,取得与指定颜色最接近的纯色
    • GetObjectAPI:取得对指定对象进行说明的结构
    • GetObjectType:判断由指定句柄引用的GDI对象的类型
    • GetPath:取得对当前路径进行定义的数据
    • GetPixel:在指定设备场景中取得一个像素的RGB值
    • GetPolyFillMode:针对指定设备场景,获得多边形填充模式
    • GetROP2:针对指定设备场景,取得当前的绘图模式
    • GetStockObject:取得一个固有对象
    • GetSysColorBrush:为任何一种标准系统颜色取得一个刷子
    • GetWinMetaFileBits:将增强型图元文件转换成标准Windows图元文件
    • InvertRect:通过反转每个像素的值,反转设备场景中指定的矩形
    • LineDDA:枚举指定线段中的所有点
    • LineTo:用当前画笔画一条线,从当前位置连到一个指定的点
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    IntelliJ IDEA macOS版
    IntelliJ IDEA macOS版

    IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

    PyCharm macOS版
    PyCharm macOS版

    JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

    WebStorm macOS版
    WebStorm macOS版

    JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

    After Effects macOS版
    After Effects macOS版

    Adobe After Effects 是面向动态图形、影视特效与视频合成的专业创作软件。它提供关键帧动画、遮罩抠像、运动跟踪、三维空间、文字动画和表达式等工具,并可与 Premiere Pro、Photoshop、Illustrator

    Audition macOS版
    Audition macOS版

    Adobe Audition 是面向播客、影视后期、音乐制作及内容创作者的专业音频工作站,提供波形精修、多轨录制与混音、频谱编辑、降噪修复、响度匹配和效果处理工具,并可与 Adobe Premiere 协同完成视频声音制作。

    Bridge macOS版
    Bridge macOS版

    Adobe Bridge 是面向摄影师、设计师及内容团队的免费数字资产管理工具,可集中预览照片、视频和 Adobe 项目文件,并利用评级、标签、关键词、元数据、筛选与收藏集完成分类检索。它还支持批量重命名、格式导出、相机导入及 Camera

    Illustrator macOS版
    Illustrator macOS版

    Adobe Illustrator 是 Adobe 推出的专业矢量图形设计软件,适合在 Mac 上制作标志、图标、插画、包装、信息图及印刷版面。它以路径和锚点构建可无损缩放的图形,并提供钢笔、形状、文字、图像描摹、渐变、画板及生成式功能。

    InDesign macOS版
    InDesign macOS版

    Adobe InDesign 是面向印刷品与数字出版物的专业版面设计软件,可在 Mac 上制作书籍、杂志、宣传册、海报、报告及交互式文档。它提供精细的文字样式、网格、母版、长文档管理和印前输出能力。

    Lightroom Classic macOS版
    Lightroom Classic macOS版

    Adobe Lightroom Classic 是面向桌面摄影工作流的照片管理与后期处理软件,可将原始照片保存在本地硬盘,通过目录、关键词、评分和收藏夹高效整理图库,并提供 RAW 冲印、蒙版、镜头校正、批量同步及多格式导出等功能。

    Media Encoder macOS版
    Media Encoder macOS版

    Adobe Media Encoder 是 Adobe 推出的专业音视频编码与转码工具,可通过队列、预设和监视文件夹批量完成格式转换、代理文件创建及多平台成片输出,并与 Premiere Pro、After Effects 等软件紧密协作。

    Photoshop macOS版
    Photoshop macOS版

    Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理软件,提供图层、蒙版、选区、修复、调色、文字排版、智能对象及生成式编辑等能力。Mac 版支持 Intel 与 Apple Silicon 处理器。

    Premiere Pro macOS版
    Premiere Pro macOS版

    Adobe Premiere Pro 是面向专业视频制作的非线性剪辑软件,提供多轨时间线、调色、音频处理、字幕、代理工作流和多格式输出能力,并可与 After Effects、Audition、Photoshop 及 Frame.io 协同

    WINDOWS 更多
    IntelliJ IDEA Windows版
    IntelliJ IDEA Windows版

    JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

    PhpStorm Windows版
    PhpStorm Windows版

    PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

    PyCharm Windows版
    PyCharm Windows版

    PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,

    WebStorm Windows版
    WebStorm Windows版

    WebStorm 是 JetBrains 面向 JavaScript、TypeScript 和现代 Web 技术打造的集成开发环境。它提供项目级代码分析、智能补全、安全重构、导航搜索,并集成调试、测试、终端、Git 与常用前端工具,

    Photoshop Windows版
    Photoshop Windows版

    Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理工具,可在 Windows 上完成照片修饰、选区抠图、图层合成、文字排版、绘画及生成式编辑。软件采用订阅授权,由 Creative Cloud 管理安装、更新与许

    InDesign Windows版
    InDesign Windows版

    Adobe InDesign 是面向印刷与数字出版的专业页面排版工具,可制作书籍、杂志、宣传册、海报、交互式 PDF 和电子书。它提供精细的文字样式、多页面管理、印前检查及多格式输出能力,并能与 Photoshop、Illustrator

    Illustrator Windows版
    Illustrator Windows版

    Adobe Illustrator 是用于绘制矢量图形、插画、图标、徽标和版式的专业设计工具。它以路径和锚点为核心,作品放大后仍能保持清晰,并提供画板、文字、渐变、图像描摹及精确变换等功能,适合品牌视觉、印刷物料、数字界面和商业插画创作。

    Bridge Windows版
    Bridge Windows版

    Adobe Bridge 是 Adobe 推出的创意资产管理工具,可集中预览、分类和查找照片、视频、PDF及多种设计文件,并支持元数据、关键词、评级、批量重命名和格式导出。它可与 Photoshop、Illustrator 等应用衔接,

    Lightroom Classic Windows版
    Lightroom Classic Windows版

    Adobe Lightroom Classic 是面向 Windows 桌面摄影工作流的照片管理与无损编辑工具,可通过目录集中整理大型图库,并完成 RAW 显影、局部蒙版、批量调整、打印和多格式导出。它强调本地文件管理与精细控制,

    Acrobat Pro Windows版
    Acrobat Pro Windows版

    Adobe Acrobat Pro 是面向专业 PDF 工作的综合解决方案,可在 Windows 中创建、编辑、转换、比较、整理和保护文档,并支持表单、电子签名、扫描件文字识别及敏感信息永久遮盖。订阅还包含网页、移动服务和云端协作能力,

    After Effects Windows版
    After Effects Windows版

    Adobe After Effects 是面向动态图形、动画与影视视觉特效制作的专业工具,可完成关键帧动画、图层合成、遮罩跟踪、抠像、文字动画和二维三维元素整合。Windows 版通过 Adobe Creative Cloud 安装及更新,

    Media Encoder Windows版
    Media Encoder Windows版

    Adobe Media Encoder 是 Adobe 面向视频与音频制作流程提供的专业编码和转码工具,可批量处理媒体文件、创建代理、套用输出预设并监控文件夹自动执行任务。它与 Premiere、After Effects、Audition