|
|
原文:http://www.cnblogs.com/cltsq/articles/api.html
' v3 D L2 M9 X1. API之网络函数
7 L0 P# Q& H u" P M6 X* WWNetAddConnection 创建同一个网络资源的永久性连接
- `/ m( }$ r. H% q$ l8 _+ ~WNetAddConnection2 创建同一个网络资源的连接 ) f- S. r K; j/ S) V: y! s
WNetAddConnection3 创建同一个网络资源的连接
" x4 w6 [* ~) F( [9 BWNetCancelConnection 结束一个网络连接
! f0 I( {- t- t& iWNetCancelConnection2 结束一个网络连接
; h, z& {+ M- @& P! fWNetCloseEnum 结束一次枚举操作 - j" `/ @, f4 i* M4 p
WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 # I% I! x7 S5 t% P, h
WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接
o/ N: V, E/ O3 OWNetEnumResource 枚举网络资源 0 h! M7 u( x" I! k6 u$ K+ H2 D
WNetGetConnection 获取本地或已连接的一个资源的网络名称
6 E; U: z: E- R8 k1 p8 J6 W: jWNetGetLastError 获取网络错误的扩展错误信息
3 N; E) D. Y$ {' m2 Z4 x5 d* p: wWNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称 8 W n1 W1 z& l
WNetGetUser 获取一个网络资源用以连接的名字 1 E! O$ k3 W7 [$ f! ^+ Z
WNetOpenEnum 启动对网络资源进行枚举的过程 6 T( L5 b" }; |8 F0 B0 X
2. API之消息函数 / [: |: B* {9 l7 m% E
BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口 9 ~" s+ c3 d& g2 _ c- ^
GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置 3 g _4 u5 X5 D: A" M! r
GetMessageTime 取得消息队列中上一条消息处理完毕时的时间
\7 t; u. p8 y5 W$ \PostMessage 将一条消息投递到指定窗口的消息队列 " E: x8 `' C1 n6 I ~5 N& ^' Q3 Q
PostThreadMessage 将一条消息投递给应用程序
! }) x: i6 j' Q' W; Z _RegisterWindowMessage 获取分配给一个字串标识符的消息编号 ( s, W9 \( x! F t5 B% h
ReplyMessage 答复一个消息 ! {- O, ?9 R# D: U
SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口 ! D2 B& {: B D% p. u* I3 G0 V7 V
SendMessageCallback 将一条消息发给窗口
% {* \' c4 `2 `: l1 \SendMessageTimeout 向窗口发送一条消息
' s( q2 v: \% q7 l) HSendNotifyMessage 向窗口发送一条消息
& [' o; M6 I. ?# y ?8 N% g3 T N3. API之文件处理函数 / T# r: K8 e# l$ [7 b
CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 ( | B1 F9 p3 {& J( ]8 a
CompareFileTime 对比两个文件的时间
6 J7 C9 l* h! |/ g6 @! fCopyFile 复制文件 # H: r- `! C( D' y/ Y
CreateDirectory 创建一个新目录
; `/ l1 G( s6 u$ y0 B- Z" b! x) X' b. UCreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 3 ?6 W+ M( a! b" k8 v9 ?0 O* U
CreateFileMapping 创建一个新的文件映射对象
& w8 Q" f# B& Q8 m8 k: B% E3 q" SDeleteFile 删除指定文件 1 u: K' v: ?9 ]
DeviceIoControl 对设备执行指定的操作
( b# V. p6 Y. N n! @/ W# V6 _DosDateTimeToFileTime 将DOS日期和时间值转换成一个 win32 FILETIME 值
; p1 H- h4 J* z5 H5 uFileTimeToDosDateTime 将一个 win32 FILETIME 值转换成DOS日期和时间值
# k$ Q& ^0 V! I# e; d" MFileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间
& X" e5 |# A# ~FileTimeToSystemTime 根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构
?% X$ F4 p. m" d; f! _FindClose 关闭由FindFirstFile函数创建的一个搜索句柄 ( A0 s. l% O9 _
FindFirstFile 根据文件名查找文件
2 I4 |6 c- V; @( q [# zFindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件
/ ]# [$ @. ]6 A* K0 ?; dFlushFileBuffers 针对指定的文件句柄,刷新内部文件缓冲区
4 k( K% w! U: n6 aFlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘
: n8 D/ Y6 M. T* B& t+ m$ RGetBinaryType 判断文件是否可以执行
~$ v* q/ y1 ?- IGetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数 9 R5 Z" [1 ]: W5 v7 V ~
GetCurrentDirectory 在一个缓冲区中装载当前目录
; R! D3 A1 r5 f! q3 f5 iDWORD GetCurrentDirectory(& U- {. `$ i% L- v0 G# b# ~3 N
DWORD nBufferLength, //缓冲区大小
7 ~$ O: ~, S1 }! q% S LPSTR lpBuffer //缓冲区的首地址5 P& | q2 A6 Y. Q, K7 }
);$ ]' f1 c0 C6 j8 A
GetDiskFreeSpace 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量 * {8 O; U9 |6 `) y3 N. ]
GetDiskFreeSpaceEx 获取与一个磁盘的组织以及剩余空间容量有关的信息 7 X+ t8 G8 W8 V# W
GetDriveType 判断一个磁盘驱动器的类型
# q, a4 |/ v0 _& }( lGetExpandedName 取得一个压缩文件的全名
. a- O3 i; f3 ?" v* C _2 @GetFileAttributes 判断指定文件的属性 " j% l( ~" s5 K0 r- Y
GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制
0 i6 d2 j' F# T- Q' Z8 g6 m7 \6 f7 U7 {GetFileSize 判断文件长度 f6 ]& m; M. [: ?' s5 a
GetFileTime 取得指定文件的时间信息 ' q- M4 Q6 X" ^# a* F+ G! j, i
GetFileType 在给出文件句柄的前提下,判断文件类型
, ~6 q9 S& Y: t. r- AGetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息
0 a: g2 Y1 M0 MGetFileVersionInfoSize 针对包含了版本资源的一个文件,判断容纳文件版本信息需要一个多大的缓冲区 2 A- }( u- K$ A( K. Z r
GetFullPathName 获取指定文件的完整路径名
$ t. v& f, j kGetLogicalDrives 判断系统中存在哪些逻辑驱动器字母 , g; B, M# f9 y# b8 f& N% F/ b
GetLogicalDriveStrings 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径 . M7 Y c; R' H8 h
GetOverlappedResult 判断一个重叠操作当前的状态 0 J: j0 Q9 ~ m- l7 P6 c
GetPrivateProfileInt 为初始化文件(.ini文件)中指定的条目获取一个整数值
8 v) l1 k% t+ l5 o! T2 PGetPrivateProfileSection 获取指定小节(在.ini文件中)所有项名和值的一个列表 1 ?5 }* p" _' Z& p: T+ R& b) t
GetPrivateProfileString 为初始化文件中指定的条目取得字串
+ e- b" Z# Y- x, {GetProfileInt 取得win.ini初始化文件中指定条目的一个整数值 : [: W. D5 ^% u. l- s- f. d3 {
GetProfileSection 获取指定小节(在win.ini文件中)所有项名和值的一个列表
9 a; D3 R! g; r& H oGetProfileString 为win.ini初始化文件中指定的条目取得字串 ( g- u' u: {, m3 I( \- E8 Z
GetShortPathName 获取指定文件的短路径名 " W# k' y$ F+ H* M, Z/ Q
GetSystemDirectory 取得Windows系统目录(即System目录)的完整路径名
1 J+ u7 W+ I7 P) D1 N) xGetTempFileName 这个函数包含了一个临时文件的名字,它可由应用程序使用 ' `( r- a0 {/ {1 p/ i) N# [' @+ _# T
GetTempPath 获取为临时文件指定的路径 c1 z5 y# r+ ]; I3 q0 L" Q$ o+ n' M
GetVolumeInformation 获取与一个磁盘卷有关的信息 : M1 g" o+ A7 Z" C3 `0 j
GetWindowsDirectory 获取Windows目录的完整路径名
2 i0 u0 x p4 O& ` shread 参考lread
5 x9 ?9 l0 t2 H" T# M0 D: Nhwrite 参考lwrite函数
; D' ]1 n1 a& v8 \# Xlclose 关闭指定的文件 / |( |! [. K1 B
lcreat 创建一个文件 1 h) C! J8 [+ \' C
llseek 设置文件中进行读写的当前位置
3 ~+ i1 ?* n Y% @" K }1 \LockFile 锁定文件的某一部分,使其不与其他应用程序共享
/ _5 {: K3 w; k( t8 ]( e- yLockFileEx 与LockFile相似,只是它提供了更多的功能
* d/ r6 W9 s( S% h! I1 @' plopen 以二进制模式打开指定的文件 4 p- o" T, u: j. L
lread 将文件中的数据读入内存缓冲区 1 `* X9 V2 P/ a* \- Q2 j) z2 c
lwrite 将数据从内存缓冲区写入一个文件 1 P8 \( G- b8 H% _' ?& c
LZClose 关闭由LZOpenFile 或 LZInit函数打开的一个文件 8 u! N7 n; q0 B/ {8 }( I7 L" ]% B
LZCopy 复制一个文件
2 G6 A. a! F8 W) ^0 A2 P+ tLZInit 这个函数用于初始化内部缓冲区
5 S" ?; c$ c3 U7 kLZOpenFile 该函数能执行大量不同的文件处理,而且兼容于压缩文件 $ W, ^3 M$ h, D
LZRead 将数据从文件读入内存缓冲区
E0 x* D/ P. z" G/ lLZSeek 设置一个文件中进行读写的当前位置 5 J* \& s: q4 a8 T9 p
MapViewOfFile 将一个文件映射对象映射到当前应用程序的地址空间 1 s- `0 u" n- i& u
MoveFile 移动文件 , C* Z8 s, U0 M5 c4 s8 Y
OpenFile 这个函数能执行大量不同的文件操作 & O# z) w' t6 K
OpenFileMapping 打开一个现成的文件映射对象 ' ]6 J8 n5 R# \
QueryDosDevice 在Windows NT中,DOS设备名会映射成NT系统设备名。该函数可判断当前的设备映射情况
. V9 O, @7 `9 k" G3 QReadFile 从文件中读出数据
( N1 ?1 b4 U6 a2 z. |* n: W* BReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调
8 B) ]3 [) x8 Z( R3 ?. b6 b. |RegCloseKey 关闭系统注册表中的一个项(或键)
+ R/ S3 T: `( {; iRegConnectRegistry 访问远程系统的部分注册表
9 i8 d9 M X p1 F) JRegCreateKey 在指定的项下创建或打开一个项
( _# B! A+ {5 }$ eRegCreateKeyEx 在指定项下创建新项的更复杂的方式。在Win32环境中建议使用这个函数 1 J% W' n, F; g) r2 N( ?7 J1 d$ B
RegDeleteKey 删除现有项下方一个指定的子项 . T8 r8 ]" b5 N$ O6 I, O
RegDeleteValue 删除指定项下方的一个值
' |0 w" x# m$ I. hRegEnumKey 枚举指定项的子项。在Win32环境中应使用RegEnumKeyEx ( {* ?* F0 |' Y
RegEnumKeyEx 枚举指定项下方的子项
, H( E. g; e% B% V# p( u' WRegEnumValue 枚举指定项的值 * _" T$ b* E; ?+ W
RegFlushKey 将对项和它的子项作出的改动实际写入磁盘 # N j& V# O# N8 }+ ^) S, U
RegGetKeySecurity 获取与一个注册表项有关的安全信息 - F9 J. B% c9 Q+ m' T% l* ?
RegLoadKey 从以前用RegSaveKey函数创建的一个文件里装载注册表信息
4 |" P$ x5 t2 H* r/ f3 BRegNotifyChangeKeyValue 注册表项或它的任何一个子项发生变化时,用这个函数提供一种通知机制
+ E( p4 ~3 T# w/ h- y/ x9 FRegOpenKey 打开一个现有的注册表项 5 b4 r) o# s2 J7 N r$ ?
RegOpenKeyEx 打开一个现有的项。在win32下推荐使用这个函数 # z& K0 T5 ?8 l# _; {. |) L4 C
RegQueryInfoKey 获取与一个项有关的信息 6 ]3 r# ~ j# R0 Y5 o" X4 e
RegQueryValue 取得指定项或子项的默认(未命名)值
; R }* M F% X2 s$ A" g3 ~' |$ TRegQueryValueEx 获取一个项的设置值 0 h9 `5 n; N& \* O! l" c! Q
RegReplaceKey 用一个磁盘文件保存的信息替换注册表信息;并创建一个备份,在其中包含当前注册表信息 . e; D& R) ^" L5 ^% E
RegRestoreKey 从一个磁盘文件恢复注册表信息
) @9 |' D8 E) {0 sRegSaveKey 将一个项以及它的所有子项都保存到一个磁盘文件 ) {% C, Q6 b4 }0 T* V
RegSetKeySecurity 设置指定项的安全特性
0 G- i0 F! z- v0 ^6 PRegSetValue 设置指定项或子项的默认值 0 Q+ F, S( B" U$ s4 L, p
RegSetValueEx 设置指定项的值 3 x6 J2 u+ N Y1 G) _0 i) u4 p
RegUnLoadKey 卸载指定的项以及它的所有子项 8 L" l6 _. F. ~& |. f8 l$ X
RemoveDirectory 删除指定目录 % T& @* |* f5 y5 y# e
SearchPath 查找指定文件 ' F) E" k) z x$ I& M
SetCurrentDirectory 设置当前目录
5 e4 x8 z: o( @1 M' B! m$ PSetEndOfFile 针对一个打开的文件,将当前文件位置设为文件末尾
- w# v% q- J; s( w: f6 d! dSetFileAttributes 设置文件属性
. ]& t: X- J2 `. q. B& L! ~& a+ eSetFilePointer 在一个文件中设置当前的读写位置 " k' R" N7 W2 m/ z! C0 G
SetFileTime 设置文件的创建、访问及上次修改时间 # {! y6 b0 b# y* J9 M
SetHandleCount 这个函数不必在win32下使用;即使使用,也不会有任何效果 ' E2 T+ P s8 S2 h: ?8 V* G1 }- W
SetVolumeLabel 设置一个磁盘的卷标(Label)
k5 H- Y$ c. p* ~/ wSystemTimeToFileTime 根据一个FILETIME结构的内容,载入一个SYSTEMTIME结构
! E' ?7 t1 X& B+ rUnlockFile 解除对一个文件的锁定 8 h3 j9 c7 ^- u2 q3 b+ ] W& z
UnlockFileEx 解除对一个文件的锁定
5 L- {# B9 g6 D) F8 D# aUnmapViewOfFile 在当前应用程序的内存地址空间解除对一个文件映射对象的映射 0 c5 H' n4 n, v9 S" F
VerFindFile 用这个函数决定一个文件应安装到哪里 $ ~9 G% a1 Y0 {
VerInstallFile 用这个函数安装一个文件 4 U- g% X% ?4 z2 r
VerLanguageName 这个函数能根据16位语言代码获取一种语言的名称
; w$ g9 t. k7 U) [% [VerQueryValue 这个函数用于从版本资源中获取信息
9 k0 ^" V8 p) ?! z/ eWriteFile 将数据写入一个文件 2 w L7 ?2 Q5 i0 }; a7 g" H
WriteFileEx 与WriteFile类似,只是它只能用于异步写操作,并包括了一个完整的回调
+ t. R2 |% v8 d% z! F/ Y: k4 _WritePrivateProfileSection 为一个初始化文件(.ini)中指定的小节设置所有项名和值 " d+ j" Q9 d' t5 p; [8 S5 y
WritePrivateProfileString 在初始化文件指定小节内设置一个字串 7 P% L: S6 d+ d9 t" t, P0 H' B
WriteProfileSection 为Win.ini初始化文件中一个指定的小节设置所有项名和值
2 }" r" y. h/ J) J/ aWriteProfileString 在Win.ini初始化文件指定小节内设置一个字串 " [% I. H" h4 _2 C/ G- S. h# |- x( Q
4. API之打印函数
$ k. {' g% b3 M: |, H) t( FAbortDoc 取消一份文档的打印 0 ]0 D2 {/ d. C) m! T% i+ L
AbortPrinter 删除与一台打印机关联在一起的缓冲文件 3 P; N$ o1 r; \8 v
AddForm 为打印机的表单列表添加一个新表单
& ~# R: a( F, f8 nAddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 5 O Q- b/ N/ m! s; O$ O
AddMonitor 为系统添加一个打印机监视器
. H) p+ _6 _6 i* JAddPort 启动"添加端口"对话框,允许用户在系统可用端口列表中加入一个新端口 6 [8 o: a( x# U, V s- ]
AddPrinter 在系统中添加一台新打印机 ^4 p/ Q C/ |: Z+ T2 Z7 _
AddPrinterConnection 连接指定的打印机 ) Q$ v ^: W. V- H& V
AddPrinterDriver 为指定的系统添加一个打印驱动程序 ( v. @& J4 B/ q+ k3 I, U% A
AddPrintProcessor 为指定的系统添加一个打印处理器
( B! e' b; t' u5 U: O% hAddPrintProvidor 为系统添加一个打印供应商 ! d- q J# F* P5 ~2 n
AdvancedDocumentProperties 启动打印机文档设置对话框
: b' `$ M4 O" v& J6 \, XClosePrinter 关闭一个打开的打印机对象 ; }( E0 H& s- }8 V! }- `3 c, {
ConfigurePort 针对指定的端口,启动一个端口配置对话框 3 r% V6 Z# f2 z) L9 m9 \) P
ConnectToPrinterDlg 启动连接打印机对话框,用它同访问网络的打印机连接 8 G0 _4 d: I) w- X* |, Z7 G, N7 z# U
DeleteForm 从打印机可用表单列表中删除一个表单 * h% A1 r3 z' B1 y; W9 I* l6 r
DeleteMonitor 删除指定的打印监视器 4 t5 ]3 ^% H, _& w8 F
DeletePort 启动"删除端口"对话框,允许用户从当前系统删除一个端口
& s5 |, W5 \3 K7 @2 iDeletePrinter 将指定的打印机标志为从系统中删除 / s! i3 o% O1 c- Y
DeletePrinterConnection 删除与指定打印机的连接
& g* @/ V1 z. f1 IDeletePrinterDriver 从系统删除一个打印机驱动程序
1 B4 Z! L% R5 @+ F9 mDeletePrintProcessor 从指定系统删除一个打印处理器
5 T/ {5 m# K( Q5 l. c" EDeletePrintProvidor 从系统中删除一个打印供应商
0 j. I M; r& q8 YDeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息
& z2 J" E* r1 vDocumentProperties 打印机配置控制函数 ! ?9 ~8 t* X- ]
EndDocAPI 结束一个成功的打印作业 9 `& q8 I' l* a2 p0 f! i
EndDocPrinter 在后台打印程序的级别指定一个文档的结束
" ~! a+ `5 b6 SEndPage 用这个函数完成一个页面的打印,并准备设备场景,以便打印下一个页
& j, j. E: x' x9 Y; [* B2 }EndPagePrinter 指定一个页在打印作业中的结尾 . R8 y: D: j, p# G$ Y" u
EnumForms 枚举一台打印机可用的表单 ( q# _- B% Z( D
EnumJobs 枚举打印队列中的作业 , z6 k9 W7 a7 ~9 g5 A) a4 a
EnumMonitors 枚举可用的打印监视器
3 E( v3 D, F; V6 M$ kEnumPorts 枚举一个系统可用的端口 ) Y) H% ?5 m& \5 Q3 E" O
EnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序 + h* [: r( v" q/ k N- o8 B
EnumPrinters 枚举系统中安装的打印机 . a6 K6 N0 @. _' a) e
EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型 ! m$ C a3 B9 d5 `; P
EnumPrintProcessors 枚举系统中可用的打印处理器
9 ]" J4 a! S( p+ r9 R: WEscape 设备控制函数
. n/ f \8 r4 MFindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象
& T a( Y4 }9 c% [* z7 ~6 F) ~FindFirstPrinterChangeNotification 创建一个新的改变通告对象,以便我们注意打印机状态的各种变化
* K! }; Y, S- {6 JFindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因
; p6 s+ s" h8 z; A" P" I, jFreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区 6 g; N" O# w& R+ _% |2 F B
GetForm 取得与指定表单有关的信息
$ K, _; F$ k. t% Z. g7 O# CGetJob 获取与指定作业有关的信息 - b; F& }; b4 ], E( X7 n' z+ ~+ v3 y
GetPrinter 取得与指定打印机有关的信息 9 L3 K+ ^5 `) C+ w, C
GetPrinterData 为打印机设置注册表配置信息 $ U, y! P! ~$ j& P/ T% q
GetPrinterDriver 针对指定的打印机,获取与打印机驱动程序有关的信息 9 x( q. |* z& p# v1 {+ A! n, q; L
GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么 , |4 t, {+ p2 l
GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录 % _0 }2 o, ~3 n m% U( V, e
OpenPrinter 打开指定的打印机,并获取打印机的句柄 4 M8 h {- ]! T9 `* J
PrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框 \1 g+ }) ]/ ]4 k7 }: [
PrinterProperties 启动打印机属性对话框,以便对打印机进行配置
1 R* p4 \& h0 i I# R4 N6 z* FReadPrinter 从打印机读入数据 2 ?" {! b: e0 w: B4 l0 L! V
ResetDC 重设一个设备场景
& s# X( V, ]/ F* h& `& e$ u- O- U3 KResetPrinter 改变指定打印机的默认数据类型及文档设置
6 z+ l% G# i2 b# IScheduleJob 提交一个要打印的作业
( [, |1 g8 b: L8 i+ VSetAbortProc 为Windows指定取消函数的地址
: Q( ?4 j* N& C! Z. [SetForm 为指定的表单设置信息 ! } K, |( a9 d# s8 \8 g3 ^2 q
SetJob 对一个打印作业的状态进行控制 ) D- u- R0 W: P
SetPrinter 对一台打印机的状态进行控制 2 _2 C( P) n" ^3 V; k
SetPrinterData 设置打印机的注册表配置信息 7 {8 o- `0 h/ V9 F
StartDoc 开始一个打印作业
% g$ a; j5 C' _$ iStartDocPrinter 在后台打印的级别启动一个新文档 9 J$ b: E6 y7 j0 x A8 n0 ]
StartPage 打印一个新页前要先调用这个函数 6 L( D2 P6 Y4 l( O6 o- o) ]
StartPagePrinter 在打印作业中指定一个新页的开始
' r# I; E' @' a/ T+ [WritePrinter 将发送目录中的数据写入打印机 ; R) d0 Q$ G& W( `8 o3 {
5. API之文本和字体函数
/ [' }9 n+ d {+ q$ W' A0 C" H- ^AddFontResource 在Windows系统中添加一种字体资源 $ Z5 n! |4 _1 _+ t
CreateFont 用指定的属性创建一种逻辑字体
$ N/ G7 U& c0 CCreateFontIndirect 用指定的属性创建一种逻辑字体 2 s9 o, x6 o7 I5 S( ^0 `9 @% E4 O
CreateScalableFontResource 为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统 ) L( s* w% y! w0 T
DrawText 将文本描绘到指定的矩形中
. `) l$ x$ b* Z- i8 N& S# @6 rDrawTextEx 与DrawText相似,只是加入了更多的功能 . b, X! D( g* s7 {
EnumFontFamilies 列举指定设备可用的字体
2 I$ d* p9 m- o) n. |EnumFontFamiliesEx 列举指定设备可用的字体 4 V% Z6 p+ U0 Z) X5 \
EnumFonts 列举指定设备可用的字体
- b7 o- {/ i. Z& }6 l8 x4 f3 Y( nExtTextOut 经过扩展的文本描绘函数。也请参考SetTextAlign函数
- c' ?, b& A; \$ q4 p7 G; hGetAspectRatioFilterEx 用SetMapperFlags要求Windows只选择与设备当前纵横比相符的光栅字体时,本函数可判断纵横比大小
* {$ w( ~+ d8 \ n/ A9 @GetCharABCWidths 判断TureType字体中一个或多个字符的A-B-C大小
4 v% ^! Q' m* \8 D4 R; Z( fGetCharABCWidthsFloat 查询一种字体中一个或多个字符的A-B-C尺寸 " k6 ]% l( `# a% D: n
GetCharacterPlacement 该函数用于了解如何用一个给定的字符显示一个字串 ( v# _) d% D) s
GetCharWidth 调查字体中一个或多个字符的宽度
& i$ R7 D4 i0 }- n" Q5 ?GetFontData 接收一种可缩放字体文件的数据 6 t5 X+ _9 \5 b0 P+ l
GetFontLanguageInfo 返回目前选入指定设备场景中的字体的信息
* C Q1 M! M3 {! y. s* Z" v' B$ gGetGlyphOutline 取得TureType字体中构成一个字符的曲线信息
/ \- o9 U& d+ x4 j" ZGetKerningPairs 取得指定字体的字距信息 & g: W( }( n9 B% G; ?
GetOutlineTextMetrics 接收与TureType字体内部特征有关的详细信息
+ S; H7 T0 Q+ Y0 ~0 B0 r1 r1 qGetRasterizerCaps 了解系统是否有能力支持可缩放的字体 $ I: b5 d' v/ I
GetTabbedTextExtent 判断一个字串占据的范围,同时考虑制表站扩充的因素 9 j$ d2 ?- t. g5 j" S
GetTextAlign 接收一个设备场景当前的文本对齐标志 6 F4 c. ^+ Q- B+ n' H r
GetTextCharacterExtra 判断额外字符间距的当前值 : q: O- [! X$ A- J0 f4 J
GetTextCharset 接收当前选入指定设备场景的字体的字符集标识符 8 H2 u# T8 B7 y7 E
GetTextCharsetInfo 获取与当前选定字体的字符集有关的详细信息
& X& I- p( Z$ b3 ]$ @GetTextColor 判断当前字体颜色。通常也称为"前景色"
3 r% u- T) R0 ^# {. j" [5 kGetTextExtentExPoint 判断要填入指定区域的字符数量。也用一个数组装载每个字符的范围信息 7 J. i6 e8 S) T7 u7 R! T: H3 z/ D3 U
GetTextExtentPoint 判断一个字串的大小(范围) 4 m5 i2 X, ^7 ]1 ]
GetTextFace 获取一种字体的字样名
' g! Q0 Z1 ?8 S% R0 H) qGetTextMetrics 获取与选入一种设备场景的物理字体有关的信息 5 }1 |5 y' [; d2 x2 J
GrayString 描绘一个以灰色显示的字串。通常由Windows用于标识禁止状态
5 Z" N- G S1 } L8 T8 sPolyTextOut 描绘一系列字串 ( F. a* L7 M7 C% Y
RemoveFontResource 从Windows系统中删除一种字体资源
; q* o5 D- r* K. r/ N5 J' O! \SetMapperFlags Windows对字体进行映射时,可用该函数选择与目标设备的纵横比相符的光栅字体
: a; i6 l0 j5 t7 f9 D7 U( {' m2 cSetTextAlign 设置文本对齐方式,并指定在文本输出过程中使用设备场景的当前位置
; [$ R5 R9 v8 Z5 {+ Y) x, p6 \' LSetTextCharacterExtra 描绘文本的时候,指定要在字符间插入的额外间距 / ~; }) a, v- {: R9 B. J
SetTextColor 设置当前文本颜色。这种颜色也称为"前景色"
# d3 B( t3 A3 @5 y" z: c- q% r" f; ZSetTextJustification 通过指定一个文本行应占据的额外空间,可用这个函数对文本进行两端对齐处理 , [) m5 H- a! \' D- w
TabbedTextOut 支持制表站的一个文本描绘函数
5 L, f; j6 t- L3 l# K3 l* \TextOut 文本绘图函数
6 E, |& a. N: j" U4 qWINGDIAPI BOOL WINAPI TextOut(
3 F) P) s3 U) D! E4 h' `! \0 CHDC, //输出设备
8 Q. v7 m' ~$ G1 S2 xint, //输出的横坐标
4 U- @) k( _; c$ R' h& cint, //纵坐标+ S2 E' h6 z- X8 y3 B+ E. t( ^ ~+ _# j
LPCSTR, //输出的文本str
8 k: @& |" ~6 _6 Cint); //文本的长度:lstrlen(str)
6 b, Z1 r- v3 l- _6. API之菜单函数
' A0 O% R# [' ~) J1 s( [! g' TAppendMenu 在指定的菜单里添加一个菜单项
0 k* p6 d g" M5 u5 {" pCheckMenuItem 复选或撤消复选指定的菜单条目
' ?" B& X1 j# \0 \CheckMenuRadioItem 指定一个菜单条目被复选成"单选"项目
& U: g6 Q! [! d. FCreateMenu 创建新菜单
( l( ]6 w5 t xCreatePopupMenu 创建一个空的弹出式菜单 : F# u2 I0 M9 h8 x& E" w8 ?5 J) \
DeleteMenu 删除指定的菜单条目
% k9 s, x" p% L4 a) r3 v- y0 w" \DestroyMenu 删除指定的菜单 8 y# n9 K0 u! V0 Z1 X! P
DrawMenuBar 为指定的窗口重画菜单
, I( k( C- p% G! W5 [7 A& H( qEnableMenuItem 允许或禁止指定的菜单条目
8 ^* g. |, t4 e. EGetMenu 取得窗口中一个菜单的句柄 $ T( ^0 |! k$ K' u
GetMenuCheckMarkDimensions 返回一个菜单复选符的大小
( b$ {" m0 z: Q. l. GGetMenuContextHelpId 取得一个菜单的帮助场景ID ; q$ ~; e0 o- i% Z
GetMenuDefaultItem 判断菜单中的哪个条目是默认条目 ! k' R K: A- c' R2 m
GetMenuItemCount 返回菜单中条目(菜单项)的数量 f+ t" w- Z: F) s
GetMenuItemID 返回位于菜单中指定位置处的条目的菜单ID
* B1 F3 S+ ]8 b6 x8 L( @GetMenuItemInfo 取得(接收)与一个菜单条目有关的特定信息 & N) E& P: G" S8 E. R
GetMenuItemRect 在一个矩形中装载指定菜单条目的屏幕坐标信息 ' Y/ F: \- W; u$ _& c, K" S" V+ t
GetMenuState 取得与指定菜单条目状态有关的信息 + |6 E Y4 ~3 N$ v' `. L9 s( N3 ]
GetMenuString 取得指定菜单条目的字串 + l# h: a) h, S) n& j' M, A
GetSubMenu 取得一个弹出式菜单的句柄,它位于菜单中指定的位置 4 E- b0 K) ]9 o
GetSystemMenu 取得指定窗口的系统菜单的句柄
" A' d& r4 g, g; Q. _- KHiliteMenuItem 控制顶级菜单条目的加亮显示状态 9 X3 }% t2 `# ~
InsertMenu 在菜单的指定位置处插入一个菜单条目,并根据需要将其他条目向下移动
+ e2 ~$ N+ `' ?+ l9 q3 ~InsertMenuItem 插入一个新菜单条目 . o) z/ h" ~( H0 a7 R
IsMenu 判断指定的句柄是否为一个菜单的句柄
6 x! f4 r. \. Z4 r" u, u0 PLoadMenu 从指定的模块或应用程序实例中载入一个菜单
$ a$ W/ \! J+ \( H" gLoadMenuIndirect 载入一个菜单 * ]6 l9 B3 L8 G: W2 p+ }- @, I
MenuItemFromPoint 判断哪个菜单条目包含了屏幕上一个指定的点 - W4 a4 O- K" [4 I
ModifyMenu 改变菜单条目 , k& \ ]5 S+ M# |5 k
RemoveMenu 删除指定的菜单条目
1 Z2 z9 |5 i$ x$ H9 ?+ a: DSetMenu 设置窗口菜单
5 R9 t1 x4 b% mSetMenuContextHelpId 设置一个菜单的帮助场景ID
: |& h5 O7 W- V1 i9 |SetMenuDefaultItem 将一个菜单条目设为默认条目 5 f' u1 j8 k3 m
SetMenuItemBitmaps 设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√) % O) t7 e f7 n H6 y# ]
SetMenuItemInfo 为一个菜单条目设置指定的信息
) f0 S! H6 _% U! R+ \TrackPopupMenu 在屏幕的任意地方显示一个弹出式菜单
/ S6 ]( @, G+ J- N! \3 V3 qTrackPopupMenuEx 与TrackPopupMenu相似,只是它提供了额外的功能
* I' W& F3 |8 Y# H# {; m5 G) j7. API之位图、图标和光栅运算函数 ! O6 _, @# n# U% @" O3 E
BitBlt 将一幅位图从一个设备场景复制到另一个5 z6 F( r: \+ u- O6 X7 K J
WINGDIAPI BOOL WINAPI BitBlt(- @! L. l8 k) R
HDC, //目标HDC
# o' o `% N: o2 ?# a/ Q' [int, //X1
: U; p8 _. E) U1 x7 Z( Mint, //Y1
) X8 a5 p- b1 q$ A+ Q2 [* n& tint, //width
* t7 u0 F$ @6 h7 g; ]int, //height" W3 a$ H g6 N
HDC, //源HDC- @/ j3 t) n" ]* x, q+ m `
int, //右边的距离7 L5 F6 r# ?: K% E( q0 _/ t
int, //??8 d& z) t' ]4 i$ I
DWORD); //拷贝方式:SRCCOPY|SRCPAINT|SRCAND|SRCINVERT|RCERASE|NOTSRCCOPY|NOTSRCERASE|MERGECOPY|MERGEPAINT|& a; _ l- t& b( g3 y( t
PATCOPY|PATPAINT|PATINVERT|DSTINVERT|BLACKNESS|WHITENESS. G+ _5 W& K H6 E. j
CopyIcon 制作指定图标或鼠标指针的一个副本。这个副本从属于发出调用的应用程序 8 S2 E1 m( Z+ K! n( C. ]
CopyImage 复制位图、图标或指针,同时在复制过程中进行一些转换工作
" `4 n4 G% a5 KCreateBitmap 按照规定的格式创建一幅与设备有关位图 . F6 N* P1 O& i/ Y/ G
CreateBitmapIndirect 创建一幅与设备有关位图 * L/ u* [4 |4 B T% i) K# n
CreateCompatibleBitmap 创建一幅与设备有关位图,它与指定的设备场景兼容
" K8 N5 }. D n) oCreateCursor 创建一个鼠标指针 - F5 v# K+ Z6 R+ o5 W$ y
CreateDIBitmap 根据一幅与设备无关的位图创建一幅与设备有关的位图 ) U9 Q3 [: `% p2 w
CreateDIBSection 创建一个DIBSection
. e, k1 _' u+ j( s* b6 RCreateIcon 创建一个图标 5 O/ m: p5 c o6 Y
CreateIconIndirect 创建一个图标
W5 y; M! k* H2 ]5 cDestroyCursor 清除指定的鼠标指针,并释放它占用的所有系统资源 6 @5 {: e+ m2 O- A2 j+ J) I; {
DestroyIcon 清除图标 ( o" k* g$ y( g
DrawIcon 在指定的位置画一个图标
+ q+ k. a$ V5 R# lDrawIconEx 描绘一个图标或鼠标指针。与DrawIcon相比,这个函数提供了更多的功能 * j* ~4 G) U F. G! p4 z7 O. L
ExtractAssociatedIcon 判断一个可执行程序或DLL中是否存在图标,或是否有图标与系统注册表中指定的文件存在关联并提取之 : M, e& o) X" X v9 `
ExtractIcon 判断一个可执行文件或DLL中是否有图标存在,并将其提取出来 8 o4 p; ]# m" }- T$ a8 [
GetBitmapBits 将来自位图的二进制位复制到一个缓冲区
0 W4 }" m+ ~, r" P3 {5 |GetBitmapDimensionEx 取得一幅位图的宽度和高度 # o3 Z! X! d; Q& r* o% G. O8 C- Z
GetDIBColorTable 从选入设备场景的DIBSection中取得颜色表信息
2 j. Y' `$ V3 ~' q, @; nGetDIBits 将来自一幅位图的二进制位复制到一幅与设备无关的位图里 : l" d2 ?$ l- s) @( V4 c( i% U0 }
GetIconInfo 取得与图标有关的信息
: k; h! Y) `" v$ c: S* ?' ^GetStretchBltMode 判断StretchBlt 和 StretchDIBits函数采用的伸缩模式
) V3 b" D3 D) |LoadBitmap 从指定的模块或应用程序实例中载入一幅位图 ! X' V: {" ~3 I+ X. M+ J
LoadCursor 从指定的模块或应用程序实例中载入一个鼠标指针 7 L( r) z0 E r& S1 q$ M( B
LoadCursorFromFile 在一个指针文件或一个动画指针文件的基础上创建一个指针 - K- ^: W2 _7 [
LoadIcon 从指定的模块或应用程序实例中载入一个图标 % m, }* S4 a: K# G
LoadImage 载入一个位图、图标或指针
1 `6 I0 ~ ]( ~" o& Y# \8 wHANDLE LoadImageA(& F& W3 z2 O- q" Y: \. K
HINSTANCE, //当前实例句柄:AfxGetInstanceHandle()
3 B8 ]6 X! v6 k( L8 l$ u* i1 Z: T LPCSTR, //资源所在的目录:c:\help.bmp0 s' Q- q6 O( N! }- w
UINT, //类型:IMAGE_BITMAP|IMAGE_ICON|IMAGE_CURSOR|IMAGE_ENHMETAFILE# Y' i& t3 D0 t& j! U# s* m# t) ~
int, //) q5 S% j" j, }0 O+ {
int, //
4 }/ C! R% l5 }2 yUINT); //风格:LR_DEFAULTCOLOR|LR_MONOCHROME|LR_COLOR|LR_COPYRETURNORG|
' N$ O1 ]; {. _6 b) D- J3 j7 v" W! lR_COPYDELETEORG|LR_LOADFROMFILE|LR_LOADTRANSPARENT|LR_DEFAULTSIZE|LR_VGACOLOR|4 z/ o6 j( `! t" t5 d! [
LR_LOADMAP3DCOLORS|LR_CREATEDIBSECTION|LR_COPYFROMRESOURCE|LR_SHARED
8 z% G7 e4 ?; l$ {3 s" G) Z9 fMaskBlt 执行复杂的图象传输,同时进行掩模(MASK)处理 k* G( I4 s6 m" {( Y
PatBlt 在当前选定的刷子的基础上,用一个图案填充指定的设备场景
9 e1 ?; N4 h% k) K5 i0 }: s; \PlgBlt 复制一幅位图,同时将其转换成一个平行四边形。利用它可对位图进行旋转处理
8 d8 O+ G0 j( }- d5 nSetBitmapBits 将来自缓冲区的二进制位复制到一幅位图 - o) G: s M& f% H6 I
SetBitmapDimensionEx 设置一幅位图的宽度。以一毫米的十分之一为单位
% _4 J# x9 v1 B9 I- u& R; MSetDIBColorTable 设置选入设备场景的一个DIBSection的颜色表信息
+ @8 L y$ r. m& p- d& e" p( ISetDIBits 将来自与设备无关位图的二进制位复制到一幅与设备有关的位图里 " ]% c0 G4 o0 c
SetDIBitsToDevice 将一幅与设备无关位图的全部或部分数据直接复制到一个设备
9 ]# ?2 m5 M* j8 iSetStretchBltMode 指定StretchBlt 和 StretchDIBits函数的伸缩模式
* y) |/ L) ]& D4 ^8 Q: uStretchBlt 将一幅位图从一个设备场景复制到另一个
0 Y/ @4 E' y9 t4 v5 }& m; AStretchDIBits 将一幅与设备无关位图的全部或部分数据直接复制到指定的设备场景 , T' V- J0 C1 M/ ]2 ^
8. API之绘图函数
' |" u8 A- j, z8 UAbortPath 抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作
6 S5 m. a: ]6 _2 ~AngleArc 用一个连接弧画一条线
+ q4 ^# n! [& D, oArc 画一个圆弧 8 Z6 e/ k* A2 e' C0 V; z$ \ W8 I
BeginPath 启动一个路径分支 2 M/ B- x( e" u3 ?) N, L
CancelDC 取消另一个线程里的长时间绘图操作
) U+ w; b1 L5 c( N: sChord 画一个弦 / G& I! k- o0 W1 N2 b
CloseEnhMetaFile 关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄 2 _! L+ U& n+ U
CloseFigure 描绘到一个路径时,关闭当前打开的图形
' z% g$ g$ x7 ECloseMetaFile 关闭指定的图元文件设备场景,并向新建的图元文件返回一个句柄
5 V' B2 P2 S* \( ^8 V: Y8 a2 Y' t* tCopyEnhMetaFile 制作指定增强型图元文件的一个副本(拷贝) , u: @$ g& ^, O* F& C
CopyMetaFile 制作指定(标准)图元文件的一个副本 , g' Q5 B; ~7 k4 f4 }$ K: K9 }& i! Y+ h. I
CreateBrushIndirect 在一个LOGBRUSH数据结构的基础上创建一个刷子 6 d* c9 Y: B3 i" C3 a
CreateDIBPatternBrush 用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案)
2 }4 F+ A; I9 B5 N% _7 c' d% gCreateEnhMetaFile 创建一个增强型的图元文件设备场景 ; R# E5 h: n2 s8 ~, u
CreateHatchBrush 创建带有阴影图案的一个刷子 3 z* V) U/ f1 M: B7 ~: L! l8 q, E- V6 n0 v
CreateMetaFile 创建一个图元文件设备场景
2 h. y" ]3 ^; k; i( [- nCreatePatternBrush 用指定了刷子图案的一幅位图创建一个刷子 , ]6 C. @. \+ ]% S: {3 i7 B
CreatePen 用指定的样式、宽度和颜色创建一个画笔
+ r3 H" X6 j# WCreatePenIndirect 根据指定的LOGPEN结构创建一个画笔 $ @. x+ ~8 U0 C# @
CreateSolidBrush 用纯色创建一个刷子 1 i* o. b/ _/ I, B' p# T, g( K
DeleteEnhMetaFile 删除指定的增强型图元文件
+ [* z) {+ Z j9 y: U+ uDeleteMetaFile 删除指定的图元文件
4 h+ t% G$ W; x4 E: B% O0 W. GWINGDIAPI BOOL WINAPI DeleteObject(HGDIOBJ) 删除GDI对象,对象使用的所有系统资源都会被释放4 S9 c, E& X: m" G4 V: N
DrawEdge 用指定的样式描绘一个矩形的边框
" z) n" r% e; r1 oDrawEscape 换码(Escape)函数将数据直接发至显示设备驱动程序 u0 ^0 f% }7 {5 `* ?
DrawFocusRect 画一个焦点矩形 0 z/ M- o" y0 d0 e
DrawFrameControl 描绘一个标准控件 4 y$ y2 Y/ T/ Z
DrawState 为一幅图象或绘图操作应用各式各样的效果
8 W6 A o: v* @Ellipse 描绘一个椭圆,由指定的矩形围绕
' C* }5 ~2 R! k1 D. gEndPath 停止定义一个路径 0 G+ P' I& b0 C8 _0 O. q3 h
EnumEnhMetaFile 针对一个增强型图元文件,列举其中单独的图元文件记录
1 ?1 @7 ~/ T. d/ j' E' c' R' F" gEnumMetaFile 为一个标准的windows图元文件枚举单独的图元文件记录 6 H; |# C J$ E! V8 [5 g. K
EnumObjects 枚举可随同指定设备场景使用的画笔和刷子 8 E' U. _; ^0 K& S
ExtCreatePen 创建一个扩展画笔(装饰或几何) 7 `- G: S: N2 F( m) O c
ExtFloodFill 在指定的设备场景里,用当前选择的刷子填充一个区域
! r1 {! E" {/ U2 e! T# b" WFillPath 关闭路径中任何打开的图形,并用当前刷子填充 3 Y, g8 l5 z" \/ ?
FillRect 用指定的刷子填充一个矩形 * e: F. e/ ~. t' U7 d
FlattenPath 将一个路径中的所有曲线都转换成线段
- I/ w- j1 U' |+ {- L! @ N( ~FloodFill 用当前选定的刷子在指定的设备场景中填充一个区域 1 V3 b* T0 w# B0 X
FrameRect 用指定的刷子围绕一个矩形画一个边框
" O7 @/ w9 O4 G/ ?GdiComment 为指定的增强型图元文件设备场景添加一条注释信息 . q5 K" \5 S2 c
GdiFlush 执行任何未决的绘图操作 / Y7 A& }' c( v. g
GdiGetBatchLimit 判断有多少个GDI绘图命令位于队列中
5 _: P% q( h& l# z0 RGdiSetBatchLimit 指定有多少个GDI绘图命令能够进入队列
2 g: Z* o9 h$ {# k" t3 a7 gGetArcDirection 画圆弧的时候,判断当前采用的绘图方向 , J. @- e( G% I' p3 n( p# F
GetBkColor 取得指定设备场景当前的背景颜色
' h% J8 V9 K7 w( _6 cGetBkMode 针对指定的设备场景,取得当前的背景填充模式
5 [# f0 B' y7 f& U: P2 ?3 w. _GetBrushOrgEx 判断指定设备场景中当前选定刷子起点 + O' z5 S, H( I# M' u& k
GetCurrentObject 获得指定类型的当前选定对象 6 s$ o3 D8 j1 Q# X- f
GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置
: z; d) f( u' `$ v, z0 _GetEnhMetaFile 取得磁盘文件中包含的一个增强型图元文件的图元文件句柄
" x# D2 X, q+ U- GGetEnhMetaFileBits 将指定的增强型图元文件复制到一个内存缓冲区里 3 P1 T& U0 N2 X3 @: X/ h
GetEnhMetaFileDescription 返回对一个增强型图元文件的说明
2 C7 L0 W: E% y! YGetEnhMetaFileHeader 取得增强型图元文件的图元文件头 5 p1 f/ N+ C& M- G5 h% u
GetEnhMetaFilePaletteEntries 取得增强型图元文件的全部或部分调色板 - {- R+ O0 r- ^& E! C9 \3 m
GetMetaFile 取得包含在一个磁盘文件中的图元文件的图元文件句柄
7 i! y% o; V* C& C1 V' vGetMetaFileBitsEx 将指定的图元文件复制到一个内存缓冲区
( K! S4 @' l/ x/ v! ~GetMiterLimit 取得设备场景的斜率限制(Miter)设置 / w* Q+ I7 K8 |4 c
GetNearestColor 根据设备的显示能力,取得与指定颜色最接近的一种纯色 - L8 w# q5 q0 r( v+ ?2 n
GetObjectAPI 取得对指定对象进行说明的一个结构
1 X6 p3 @/ e) i0 zGetObjectType 判断由指定句柄引用的GDI对象的类型
e7 L3 V+ A2 N5 l! XGetPath 取得对当前路径进行定义的一系列数据 * z1 Z% a: f9 N$ E" Y* y8 j; U$ N
GetPixel 在指定的设备场景中取得一个像素的RGB值
5 f: n# j( l$ W b4 a vGetPolyFillMode 针对指定的设备场景,获得多边形填充模式 5 D6 v6 ?8 y' N0 W q
GetROP2 针对指定的设备场景,取得当前的绘图模式 $ B1 B; u0 E4 o& V% I; c+ w" f3 T
GetStockObject 取得一个固有对象(Stock)
$ r6 Y, P2 ^) e- p2 hGetSysColorBrush 为任何一种标准系统颜色取得一个刷子
9 M1 a3 m: z6 o: w# BGetWinMetaFileBits 通过在一个缓冲区中填充用于标准图元文件的数据,将一个增强型图元文件转换成标准windows图元文件 ; S, e0 _" L7 z& Q3 j& p
InvertRect 通过反转每个像素的值,从而反转一个设备场景中指定的矩形
# i- p) ~, ^) u; WLineDDA 枚举指定线段中的所有点
0 D5 c( Z( m( N& c: ALineTo 用当前画笔画一条线,从当前位置连到一个指定的点
: _7 ?8 p' J1 @ L( d, g# cMoveToEx 为指定的设备场景指定一个新的当前画笔位置
" b, Q2 g$ K6 ?8 g1 v/ H2 LPaintDesk 在指定的设备场景中描绘桌面墙纸图案
8 y9 b6 J! l* f7 d" jPathToRegion 将当前选定的路径转换到一个区域里
4 M- Q) w# F# Q0 \Pie 画一个饼图
, |1 F, N; M5 B! k) tPlayEnhMetaFile 在指定的设备场景中画一个增强型图元文件 8 j3 E+ }+ b$ M( ]4 O- M: X
PlayEnhMetaFileRecord 回放单独一条增强型图元文件记录
+ V6 ]! H# q, t: u+ BPlayMetaFile 在指定的设备场景中回放一个图元文件 4 }: |/ b% N2 c' s: C
PlayMetaFileRecord 回放来自图元文件的单条记录
! s* T8 t7 u; ]3 ^7 K8 IPolyBezier 描绘一条或多条贝塞尔(Bezier)曲线 ! ?& q- L6 R* l' E
PolyDraw 描绘一条复杂的曲线,由线段及贝塞尔曲线组成 ; \' j( J% ^6 ?4 A% N6 J4 d
Polygon 描绘一个多边形
' T/ [8 {! G6 q! e" KPolyline 用当前画笔描绘一系列线段 " {: ^+ h* q# D$ \1 k, B8 h
PolyPolygon 用当前选定画笔描绘两个或多个多边形 x$ v& P4 a( J) Y& Z3 f
PolyPolyline 用当前选定画笔描绘两个或多个多边形
$ n# h5 Q5 K fRectangle 用当前选定的画笔描绘矩形,并用当前选定的刷子填充 * X6 E1 q( d' ?* t2 M
RoundRect 用当前选定的画笔画一个圆角矩形,并用当前选定的刷子在其中填充 3 c3 P, _5 P& a, t
SelectClipPath 将设备场景当前的路径合并到剪切区域里 ~. V; T" S* Y- x4 h. c" H4 j
SelectObject 为当前设备场景选择图形对象 # D9 \8 f2 q- s3 T; B
WINGDIAPI HGDIOBJ WINAPI SelectObject(HDC, HGDIOBJ);% g; b% ^8 X N* k8 c7 m. r
SetArcDirection 设置圆弧的描绘方向
- {% p* _2 p0 _* @5 MSetBkColor 为指定的设备场景设置背景颜色
" Z1 @ }2 Q4 |$ \SetBkMode 指定阴影刷子、虚线画笔以及字符中的空隙的填充方式 - `6 F+ X, {- E! k
SetBrushOrgEx 为指定的设备场景设置当前选定刷子的起点 7 j' n, {4 v/ |/ s
SetEnhMetaFileBits 用指定内存缓冲区内包含的数据创建一个增强型图元文件 7 E6 e& S4 Q: Y! @ `3 `% |" _
SetMetaFileBitsEx 用包含在指定内存缓冲区内的数据结构创建一个图元文件 9 y6 G' Z+ Q/ O4 p2 D
SetMiterLimit 设置设备场景当前的斜率限制 4 o" S+ T2 ^2 g2 t/ i
SetPixel 在指定的设备场景中设置一个像素的RGB值 : V9 U% N9 k9 P: ~( p* A2 m
SetPixelV 在指定的设备场景中设置一个像素的RGB值
a C7 L0 \; U. Z2 k* i/ JSetPolyFillMode 设置多边形的填充模式
, @8 o5 X1 ~! U- E- l6 p3 ySetROP2 设置指定设备场景的绘图模式。与vb的DrawMode属性完全一致 ) f* C9 a) g% [ b8 v c2 u) [$ {
SetWinMetaFileBits 将一个标准Windows图元文件转换成增强型图元文件
# C' d) q& F2 m/ l% s5 VStrokeAndFillPath 针对指定的设备场景,关闭路径上打开的所有区域
+ {! ~4 k2 v3 RStrokePath 用当前画笔描绘一个路径的轮廓。打开的图形不会被这个函数关闭
, T1 M- {8 D, mUnrealizeObject 将一个刷子对象选入设备场景之前,如刷子的起点准备用SetBrushOrgEx修改,则必须先调用本函数 + [9 `9 Y' I* H5 K3 K' A ^9 W
WidenPath 根据选定画笔的宽度,重新定义当前选定的路径
: h, x. \6 ?' }9. API之设备场景函数 6 ~/ X) u+ w) A
CombineRgn 将两个区域组合为一个新区域
$ o6 ~$ @7 C2 P- I5 qCombineTransform 驱动世界转换。它相当于依顺序进行两次转换
; h6 Y- {* n6 `$ o" ^& eCreateCompatibleDC 创建一个与特定设备场景一致的内存设备场景 + j1 y/ P, N7 o$ d
CreateDC 为专门设备创建设备场景
7 D) a$ N( b/ V4 {& ~CreateEllipticRgn 创建一个椭圆 6 W( r0 k- V: u8 T5 W
CreateEllipticRgnIndirect 创建一个内切于特定矩形的椭圆区域 5 h& j. o; e. q2 j% h$ I6 X3 }1 b
CreateIC 为专用设备创建一个信息场景 0 U5 Q, x* n* e( }
CreatePolygonRgn 创建一个由一系列点围成的区域 7 K" ^ o' T) ?( B6 t: C- ^7 P
CreatePolyPolygonRgn 创建由多个多边形构成的区域。每个多边形都应是封闭的 5 b' R e! _3 l3 g
CreateRectRgn 创建一个矩形区域 # o" d7 U* \5 U% t \
CreateRectRgnIndirect 创建一个矩形区域 Y. V! `% r7 c0 \! {: Z
CreateRoundRectRgn 创建一个圆角矩形
" z/ b/ l# ~8 n& F5 `5 WDeleteDC 删除专用设备场景或信息场景,释放所有相关窗口资源 # v# [8 j! Y; j8 \4 ?7 z" ?
DPtoLP 将点阵从设备坐标转换到专用设备场景逻辑坐标 4 U: y7 H* j. ~* L
EqualRgn 确定两个区域是否相等 : s+ Z$ m1 ?0 p+ N! _
ExcludeClipRect 从专用设备场景的剪裁区中去掉一个矩形区。矩形内不能进行绘图 - q0 m% \- k6 p! U4 @0 d
ExcludeUpdateRgn 从专用设备场景剪裁区去掉指定窗口的刷新区域
# f: ^+ d# @/ x* W$ yExtCreateRegion 根据世界转换修改区域
. l4 [- p; L9 ~0 K$ pExtSelectClipRgn 将指定区域组合到设备场景的当前剪裁区 0 x3 C( X" K6 j4 W
FillRgn 用指定刷子填充指定区域 1 q, d/ W$ V3 B, ^& \/ g4 m
FrameRgn 用指定刷子围绕指定区域画一个外框
% f9 g5 o: x, j& q; {GetBoundsRect 获取指定设备场景的边界矩形
- g# a" n& L: S: {' p1 pGetClipBox 获取完全包含指定设备场景剪裁区的最小矩形
$ \, I/ r, [1 s) ZGetClipRgn 获取设备场景当前剪裁区 7 y/ m0 ^ f& z; K* p4 W
GetDC 获取指定窗口的设备场景
0 \& Q* ]! N* o G3 fGetDCEx 为指定窗口获取设备场景。相比GetDC,本函数提供了更多的选项 . H. g5 N/ Q. S3 }6 M! k% H& R
GetDCOrgEx 获取指定设备场景起点位置(以屏幕坐标表示) % a! N! m. ]( \2 v
GetDeviceCaps 根据指定设备场景代表的设备的功能返回信息 - ~& }+ w3 R. N8 j$ E
GetGraphicsMode 确定是否允许增强图形模式(世界转换) 9 g: s! I: Q/ u+ L; |& C
GetMapMode 为特定设备场景调入映象模式 8 t! N4 v3 x4 K H+ x6 Y
GetRegionData 装入描述一个区域信息的RgnData结构或缓冲区
& P5 I' U& l& z9 zGetRgnBox 获取完全包含指定区域的最小矩形
3 b6 p, p* A& s$ U- j/ G: v Y. P6 @GetUpdateRgn 确定指定窗口的刷新区域。该区域当前无效,需要刷新 . i' Y/ X+ i1 v! H' X- X6 H8 k
GetViewportExtEx 获取设备场景视口(viewport)范围 4 H$ ?( l) C- X n! Y
GetViewportOrgEx 获取设备场景视口起点
; Z; L0 B; y9 p; {GetWindowDC 获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景
! }4 j% o; ]; |# X) \# KGetWindowExtEx 获取指定设备场景的窗口范围 ' f! Q% M( [% S4 a
GetWindowOrgEx 获取指定设备场景的逻辑窗口的起点 H7 [, l7 \5 r4 v, }8 S+ b5 K
GetWindowRgn 获取窗口区域
. g$ u0 q7 d0 t& \GetWorldTransform 如果有世界转换,为设备场景获取当前世界转换
* B+ F [) m7 Z1 \, zIntersectClipRect 为指定设备定义一个新的剪裁区 0 b; R' O- G) O9 m
InvalidateRgn 使窗口指定区域不活动,并将它加入窗口刷新区,使之可随后被重画 7 ~) M+ ]8 f" H
InvertRgn 通过颠倒每个像素值反转设备场景指定区域 / G' ^' I F3 E: p
LPtoDP 将点阵从指定设备场景逻辑坐标转换为设备坐标 / a: K- Y% U5 m, b9 J7 S
ModifyWorldTransform 根据指定的模式修改世界转换 i6 k+ s) b S o2 _4 `# @! z
OffsetClipRgn 按指定量平移设备场景剪裁区
1 m( V8 K7 N. D$ ~2 g0 e" o1 U6 oOffsetRgn 按指定偏移量平移指定区域
% i4 p3 o: W* b- u% Q8 x4 w3 aOffsetViewportOrgEx 平移设备场景视口区域 2 O; h3 s5 r1 n# B6 l' z" [
OffsetWindowOrgEx 平移指定设备场景窗口起点 3 _4 q* K' v+ T h0 X1 R {1 H2 u
PaintRgn 用当前刷子背景色填充指定区域
* l3 E/ f0 e5 ], b8 I+ {! S7 FPtInRegion 确定点是否在指定区域内
9 V. A& c- V# [PtVisible 确定指定点是否可见(即,点是否在设备场景剪裁区内) , J, Q% ^, y( [8 M( `, Y
RectInRegion 确定矩形是否有部分在指定区域内 # W' o$ r3 H0 m, |
RectVisible 确定指定矩形是否有部分可见(是否在设备场景剪裁区内) 2 O+ `& C9 b l' ]
ReleaseDC 释放由调用GetDC或GetWindowDC函数获取的指定设备场景 ) q$ D2 G B, U
RestoreDC 从设备场景堆栈恢复一个原先保存的设备场景
# j7 m+ a9 V% Z. E0 a8 OSaveDC 将指定设备场景状态保存到Windows设备场景堆栈
% _; K2 m! s- N0 p# qScaleViewportExtEx 缩放设备场景视口的范围
! u: `; N& L4 i7 g+ TScaleWindowExtEx 缩放指定设备场景窗口范围 + ~5 { Y7 @4 R7 K+ E/ a
ScrollDC 在窗口(由设备场景代表)中水平和(或)垂直滚动矩形
9 ?, i; Y+ i( m! I3 L. A7 }9 ASelectClipRgn 为指定设备场景选择新的剪裁区 7 U* k) n& r @1 j' O3 T* `
SetBoundsRect 设置指定设备场景的边界矩形
$ y. a, s7 W, u4 t- `, ~* d4 _$ ]SetGraphicsMode 允许或禁止增强图形模式,以提供某些支持(包括世界转换)
' k. V; N1 H, v8 w0 a* F- bSetMapMode 设置指定设备场景的映射模式
6 b" K% S0 r, g8 hSetRectRgn 设置区域为指定的矩形 ) D2 u1 |9 S% E. g3 z
SetViewportExtEx 设置设备场景视口范围 + }# \" E7 v- g9 _) S: A1 A' R
SetViewportOrgEx 设置设备场景视口起点 4 ^1 V3 h% t% y# } O6 f7 @1 h7 ~
SetWindowExtEx 设置指定设备场景窗口范围
1 U4 ]6 F% _% YSetWindowOrgEx 设置指定设备场景窗口起点
3 k V4 S4 T M8 cSetWindowRgn 设置窗口区域 9 Y9 l! w& [! Q' \3 S6 S
SetWorldTransform 设置世界转换 " {* j" V3 [. l; E2 n, G
ValidateRgn 激活窗口中指定区域,把它从刷新区移走 4 ]1 i) W/ T! _" c) Q' ?& {
WindowFromDC 取回与某一设备场景相关的窗口的句柄
& w: ?6 F1 O% W0 v3 {10. API之硬件与系统函数
; n/ m V/ o+ N) K: i4 rActivateKeyboardLayout 激活一个新的键盘布局。键盘布局定义了按键在一种物理性键盘上的位置与含义 2 s( ?0 |9 a0 x7 N
Beep 用于生成简单的声音
* C2 {1 D/ {- n2 j' a8 `1 s VCharToOem 将一个字串从ANSI字符集转换到OEM字符集
. t2 m. M |& K' o: tClipCursor 将指针限制到指定区域
% g5 n8 f5 R8 n" Z* Z- j8 _ConvertDefaultLocale 将一个特殊的地方标识符转换成真实的地方ID 3 j: s1 [3 V2 S
CreateCaret 根据指定的信息创建一个插入符(光标),并将它选定为指定窗口的默认插入符
# D& e/ i. I2 A- a# zDestroyCaret 清除(破坏)一个插入符 * O2 c& L% r/ j! B: o, H% r
EnumCalendarInfo 枚举在指定"地方"环境中可用的日历信息
6 K7 i! a* Q; z) N+ j( gEnumDateFormats 列举指定的"当地"设置中可用的长、短日期格式 ' N1 [; [( x7 [/ h1 p1 c- e
EnumSystemCodePages 枚举系统中已安装或支持的代码页
. M7 y7 P2 ~! ZEnumSystemLocales 枚举系统已经安装或提供支持的"地方"设置
" e! [ @1 x7 R1 S) b4 |+ H$ L# TEnumTimeFormats 枚举一个指定的地方适用的时间格式
\9 C2 B9 T/ C/ j' |5 ]ExitWindowsEx 退出windows,并用特定的选项重新启动
0 I8 y! l% H/ E WINUSERAPI BOOL WINAPI ExitWindowsEx(. N* i! l6 z' N, J/ k7 e
UINT uFlags, //EWX_LOGOFF|EWX_REBOOT|EWX_FORCE|EWX_POWEROFF|EWX_FORCEIFHUNG$ U* o9 s: U! r( D* [
DWORD dwReserved); //0
v7 S% m' L5 B3 y0 T) |% J0 }1 s/ ~% wExpandEnvironmentStrings 扩充环境字串
, j# H, Q+ K6 q: f, t6 PFreeEnvironmentStrings 翻译指定的环境字串块
/ I n9 y) l4 W* n: V {% xGetACP 判断目前正在生效的ANSI代码页
6 e2 W; s" |! k/ [. L+ BGetAsyncKeyState 判断函数调用时指定虚拟键的状态 0 V6 p* d0 _$ X3 {& @
GetCaretBlinkTime 判断插入符光标的闪烁频率 " M0 M% B$ C4 q: g0 v/ E3 [
GetCaretPos 判断插入符的当前位置 : K1 \# M# w& N$ s: V! ~0 I
GetClipCursor 取得一个矩形,用于描述目前为鼠标指针规定的剪切区域 : H/ X0 n' R. a. |
GetCommandLine 获得指向当前命令行缓冲区的一个指针
( {0 J6 ?- q& R! w# F7 J( ?( H6 ]GetComputerName 取得这台计算机的名称
4 h, H" f1 I, c- FGetCPInfo 取得与指定代码页有关的信息
: z7 S- U2 x' g. Y: ]GetCurrencyFormat 针对指定的"地方"设置,根据货币格式格式化一个数字 2 f( A' z1 T. V7 V6 d
GetCursor 获取目前选择的鼠标指针的句柄 - W" i7 d" n/ [" D( K
GetCursorPos 获取鼠标指针的当前位置
$ r! Q( H+ {* f1 j0 YGetDateFormat 针对指定的"当地"格式,对一个系统日期进行格式化
$ ]+ Z2 o+ W. e( l/ G% o, rGetDoubleClickTime 判断连续两次鼠标单击之间会被处理成双击事件的间隔时间
% l9 i. J, L+ h# B) r7 H0 Q& iGetEnvironmentStrings 为包含了当前环境字串设置的一个内存块分配和返回一个句柄
1 ~7 D& U. \5 p$ E: Z6 w2 `GetEnvironmentVariable 取得一个环境变量的值
3 {& E: f; R" o1 e5 M" WGetInputState 判断是否存在任何待决(等待处理)的鼠标或键盘事件
3 Q- _' v( d& ~; jGetKBCodePage 由GetOEMCP取代,两者功能完全相同 0 w4 X' m; R) M3 O+ D* G) B
GetKeyboardLayout 取得一个句柄,描述指定应用程序的键盘布局
0 U ~" i: S: H5 ^; bGetKeyboardLayoutList 获得系统适用的所有键盘布局的一个列表
+ G% ~6 K! z* u* ^8 `2 O8 [5 |GetKeyboardLayoutName 取得当前活动键盘布局的名称
6 I& l# L( e. NGetKeyboardState 取得键盘上每个虚拟键当前的状态 A; }# M( }5 J/ r
GetKeyboardType 了解与正在使用的键盘有关的信息
* ]& t9 L) N( n) R- C7 FGetKeyNameText 在给出扫描码的前提下,判断键名
) ]- t/ K/ H* NGetKeyState 针对已处理过的按键,在最近一次输入信息时,判断指定虚拟键的状态 : m/ q2 V3 P ^5 ?
GetLastError 针对之前调用的api函数,用这个函数取得扩展错误信息
" B8 e: t% x8 }GetLocaleInfo 取得与指定"地方"有关的信息 , N+ {. b: B5 l; d6 N
GetLocalTime 取得本地日期和时间
J( c# `1 S! a6 Y( A. U7 m( z' HGetNumberFormat 针对指定的"地方",按特定的格式格式化一个数字 0 l/ n: A* J% d9 a5 ]
GetOEMCP 判断在OEM和ANSI字符集间转换的windows代码页
+ s! j% C6 d" W5 S/ _. ]. YGetQueueStatus 判断应用程序消息队列中待决(等待处理)的消息类型
& l) y7 k( |- b) ZGetSysColor 判断指定windows显示对象的颜色
* W5 f8 G( N: q( v$ }# Z% s. E+ p0 RGetSystemDefaultLangID 取得系统的默认语言ID 9 E1 |) ~5 s' B
GetSystemDefaultLCID 取得当前的默认系统"地方"
8 k! [5 k" \* R& Y6 V/ zGetSystemInfo 取得与底层硬件平台有关的信息
3 e1 u( O. R) J3 ]! `GetSystemMetrics 返回与windows环境有关的信息
8 x, M) C6 t+ o: W7 s9 V; _7 uGetSystemPowerStatus 获得与当前系统电源状态有关的信息 ) N Q, i' i3 S' a
GetSystemTime 取得当前系统时间,这个时间采用的是"协同世界时间"(即UTC,也叫做GMT)格式 / h0 J* l0 \8 K& f
GetSystemTimeAdjustment 使内部系统时钟与一个外部的时钟信号源同步
. `7 n# i k3 ], D) `1 LGetThreadLocale 取得当前线程的地方ID " A7 }/ N, F3 o$ v- S5 Z
GetTickCount 用于获取自windows启动以来经历的时间长度(毫秒) 6 H @' }" o" K# d n9 b
GetTimeFormat 针对当前指定的"地方",按特定的格式格式化一个系统时间
1 Z4 L6 @: p* q' Z4 x F5 D0 fGetTimeZoneInformation 取得与系统时区设置有关的信息 - A8 n7 J8 Y# p. i2 s6 e
GetUserDefaultLangID 为当前用户取得默认语言ID
5 Z1 h* ~. N. a" o4 ?7 `* oGetUserDefaultLCID 取得当前用户的默认"地方"设置 3 T% B! A/ D1 n! g) Y7 m
GetUserName 取得当前用户的名字 ( p) O" L- j8 k4 i2 G0 ?4 @
GetVersion 判断当前运行的Windows和DOS版本
' |6 p' G" I5 ?' s' WGetVersionEx 取得与平台和操作系统有关的版本信息
; l6 d% Y2 T/ \9 |6 HHideCaret 在指定的窗口隐藏插入符(光标) % M# y' K# h+ Q; Q8 q- i2 ]
IsValidCodePage 判断一个代码页是否有效 - s0 i: Q) e' |) F, a. u3 n! s
IsValidLocale 判断地方标识符是否有效 + e/ G# ^5 r& Y
keybd_event 这个函数模拟了键盘行动
0 {9 A7 H P3 M* z/ i( KLoadKeyboardLayout 载入一个键盘布局
" P, x3 U% j7 }* Z2 E9 C: a8 uMapVirtualKey 根据指定的映射类型,执行不同的扫描码和字符转换 3 d$ A, _, o1 m* [5 K
MapVirtualKeyEx 根据指定的映射类型,执行不同的扫描码和字符转换
6 S! w7 b5 V- s V; sMessageBeep 播放一个系统声音。系统声音的分配方案是在控制面板里决定的 ( A2 B" E, P$ J* O G4 A
mouse_event 模拟一次鼠标事件 # K2 `" Z/ i' c3 C. f3 B; F
OemKeyScan 判断OEM字符集中的一个ASCII字符的扫描码和Shift键状态
6 a2 ?+ v% a! [6 nOemToChar 将OEM字符集的一个字串转换到ANSI字符集 # n' U$ L8 `% P& d7 }) j! S
SetCaretBlinkTime 指定插入符(光标)的闪烁频率 8 I# e1 w! x& E+ G z" ?: ?
SetCaretPos 指定插入符的位置 8 r2 N5 a5 z) W- e3 Q) x
SetComputerName 设置新的计算机名 . U0 ~ s+ h/ M5 [, D
SetCursor 将指定的鼠标指针设为当前指针
5 h+ K, q8 y# o, bSetCursorPos 设置指针的位置 ; S. j! c" C9 t1 _+ A9 w) G! c) `
SetDoubleClickTime 设置连续两次鼠标单击之间能使系统认为是双击事件的间隔时间 ( d. h; [6 u: `: ?
SetEnvironmentVariable 将一个环境变量设为指定的值
] C9 Y$ r8 m3 D. P) K+ ZSetKeyboardState 设置每个虚拟键当前在键盘上的状态 6 W7 a3 b& |& z) v X
SetLocaleInfo 改变用户"地方"设置信息
) X6 [% f6 k/ RSetLocalTime 设置当前地方时间
y% N$ R: b1 @( ]) TSetSysColors 设置指定窗口显示对象的颜色 " {0 x, E& a' H
SetSystemCursor 改变任何一个标准系统指针
0 V1 F# n6 ?. d7 a7 v0 N! [SetSystemTime 设置当前系统时间
2 t% Y! K- J; X. A' c; t, a, OSetSystemTimeAdjustment 定时添加一个校准值使内部系统时钟与一个外部的时钟信号源同步
: l9 n* d9 A& ~' J" M. U! CSetThreadLocale 为当前线程设置地方 ! J+ O0 n: _; ^, L
SetTimeZoneInformation 设置系统时区信息 9 |* j/ L8 ^2 g3 b6 A
ShowCaret 在指定的窗口里显示插入符(光标)
/ R( ~9 Q! A \* Z& L9 M5 C( WShowCursor 控制鼠标指针的可视性 , A4 j$ W4 k* a
SwapMouseButton 决定是否互换鼠标左右键的功能 . Z- b7 m4 d! y
SystemParametersInfo 获取和设置数量众多的windows系统参数
& N! ^9 O. `1 }# A; BSystemTimeToTzSpecificLocalTime 将系统时间转换成地方时间
3 p3 E, h' m* e, ~$ f8 {8 yToAscii 根据当前的扫描码和键盘信息,将一个虚拟键转换成ASCII字符
0 [& ^3 M. _0 A- OToUnicode 根据当前的扫描码和键盘信息,将一个虚拟键转换成Unicode字符 : g* c0 T" Q, R1 m. `
UnloadKeyboardLayout 卸载指定的键盘布局
7 f# D) j+ C0 e! GVkKeyScan 针对Windows字符集中一个ASCII字符,判断虚拟键码和Shift键的状态 2 c* A# ?1 d9 r: T
11. API之进程和线程函数
3 Z4 ?5 `9 I% J2 n' k) @CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作
1 ]4 r1 K( V' YCallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用 # u: Y5 X, t }
ConnectNamedPipe 指示一台服务器等待下去,直至客户机同一个命名管道连接 & n) Z6 u1 }+ P; x
CreateEvent 创建一个事件对象
% A+ H4 [3 s1 j' A, SCreateMailslot 创建一个邮路。返回的句柄由邮路服务器使用(收件人)
0 D+ O3 p8 d% ~: [CreateMutex 创建一个互斥体(MUTEX) 5 H9 \% f$ r$ ^) k% ~
CreateNamedPipe 创建一个命名管道。返回的句柄由管道的服务器端使用 2 m) l% V+ F. P% U8 ~+ b7 A' C: L; l
CreatePipe 创建一个匿名管道
9 J3 m6 Q/ H9 D4 n3 Z8 eCreateProcess 创建一个新进程(比如执行一个程序)
" n6 n: ^$ N5 l" k: e7 e* U8 F4 eCreateSemaphore 创建一个新的信号机 / Y# K+ a0 N; i' |0 Z9 @
CreateWaitableTimer 创建一个可等待的计时器对象
& d5 I+ o( C: M. i' F# W% ADisconnectNamedPipe 断开一个客户与一个命名管道的连接 0 r: [6 V/ d# b5 I
DuplicateHandle 在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄
+ D" I F' ~' tExitProcess 中止一个进程
/ C% ^* |1 |$ H6 R/ \FindCloseChangeNotification 关闭一个改动通知对象
8 t4 a- v: X3 i: L# n1 fFindExecutable 查找与一个指定文件关联在一起的程序的文件名 ) J7 f& q' e) i, | y) q2 j: ]
FindFirstChangeNotification 创建一个文件通知对象。该对象用于监视文件系统发生的变化
" L2 v+ h- {, O0 N6 l& X. EFindNextChangeNotification 重设一个文件改变通知对象,令其继续监视下一次变化 8 f! ^4 ^: K, y0 f7 }& T! R
FreeLibrary 释放指定的动态链接库 + p: P& w0 S' B8 V
GetCurrentProcess 获取当前进程的一个伪句柄 7 S$ g& g9 J4 P' F% Q4 R: g
GetCurrentProcessId 获取当前进程一个唯一的标识符
9 \$ x/ }) u2 q$ q& QGetCurrentThread 获取当前线程的一个伪句柄 & N+ l! P0 L1 ?) H; V, d
GetCurrentThreadId 获取当前线程一个唯一的线程标识符
5 B+ _- u4 Y5 D2 d; KGetExitCodeProces 获取一个已中断进程的退出代码 6 g- f2 `6 m) p& p' z0 L
GetExitCodeThread 获取一个已中止线程的退出代码
" ^9 j* q5 p$ M9 W/ u; [GetHandleInformation 获取与一个系统对象句柄有关的信息
& s1 V _8 J& I5 y0 p( VGetMailslotInfo 获取与一个邮路有关的信息 4 `) ^" [( q$ c: k6 }8 f
GetModuleFileName 获取一个已装载模板的完整路径名称
* o+ B2 W; E, y# y7 w) VGetModuleHandle 获取一个应用程序或动态链接库的模块句柄
! ?" F8 j0 S/ ^5 \/ n6 \9 `# f! V GetModuleHandleA(LPCSTR lpModuleName);
$ V. K' m& U# n1 D p* \2 Y% GGetPriorityClass 获取特定进程的优先级别
$ D, I5 x* A0 ]4 U( K+ ZGetProcessShutdownParameters 调查系统关闭时一个指定的进程相对于其它进程的关闭早迟情况 / _; y- F! u/ M3 _
GetProcessTimes 获取与一个进程的经过时间有关的信息 5 ^% \9 w) K- s
GetProcessWorkingSetSize 了解一个应用程序在运行过程中实际向它交付了多大容量的内存
6 h3 w7 O* v; @2 m ?- tGetSartupInfo 获取一个进程的启动信息 ( H7 K0 k# `8 m- U& M
GetThreadPriority 获取特定线程的优先级别 : C- u5 r4 O# z; g" P
GetTheardTimes 获取与一个线程的经过时间有关的信息 0 Z% _, b# ^0 \/ _! Q( D5 P: ]
GetWindowThreadProcessId 获取与指定窗口关联在一起的一个进程和线程标识符
4 @* y$ @/ v; U7 HLoadLibrary 载入指定的动态链接库,并将它映射到当前进程使用的地址空间
* L, K4 j7 A5 ~4 t; s! A# F( KLoadLibraryEx 装载指定的动态链接库,并为当前进程把它映射到地址空间
- }* g+ {% l d8 R8 tLoadModule 载入一个Windows应用程序,并在指定的环境中运行
. M; I3 T Z' y/ E kMsgWaitForMultipleObjects 等侯单个对象或一系列对象发出信号。如返回条件已经满足,则立即返回 & [; }1 P1 W( A
SetPriorityClass 设置一个进程的优先级别 ( R' t" G+ M) f7 c. f* T. w
SetProcessShutdownParameters 在系统关闭期间,为指定进程设置他相对于其它程序的关闭顺序
1 h) k' z! @: ]( p8 ?7 p4 \SetProcessWorkingSetSize 设置操作系统实际划分给进程使用的内存容量 3 l9 S$ i% |! J$ @6 K- B+ O6 g4 D$ v
SetThreadPriority 设定线程的优先级别
. T' M1 C/ a& MShellExecute 查找与指定文件关联在一起的程序的文件名 % F* a1 m9 q# d2 o @; f4 y3 K
TerminateProcess 结束一个进程 & N/ a/ P4 H, F& U; p( H# o; |
WinExec 运行指定的程序
. n" D/ ?! \/ U, g% a1 w' `12. API之控件与消息函数 * g p( }% {- k( p) T( H) e4 K
AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小
0 l* d5 v$ g0 \& G( {$ H6 c- w9 ?# O) CAnyPopup 判断屏幕上是否存在任何弹出式窗口 * Z6 S* w; \2 P! l& f3 c
ArrangeIconicWindows 排列一个父窗口的最小化子窗口
/ i$ M+ b3 Y/ ]) G6 v) }3 `* RAttachThreadInput 连接线程输入函数
K3 L+ R+ x, c, F/ }, o4 ~BeginDeferWindowPos 启动构建一系列新窗口位置的过程 0 w; N1 }$ z0 I; \( G$ ~6 R
BringWindowToTop 将指定的窗口带至窗口列表顶部
8 _+ j% ?* y' a$ e0 W# yCascadeWindows 以层叠方式排列窗口
9 f9 F4 G8 M( d* F# G3 yChildWindowFromPoint 返回父窗口中包含了指定点的第一个子窗口的句柄 * ^3 I$ B* Z$ T2 [$ N& D$ Y; ^5 v
ClientToScreen 判断窗口内以客户区坐标表示的一个点的屏幕坐标 3 g4 H: { k+ o% ~' b3 v9 c8 v
CloseWindow 最小化指定的窗口 3 G/ u6 @8 P' ]. k. U4 h, Y
CopyRect 矩形内容复制 * z2 l# y8 @) `) L! T, `
DeferWindowPos 该函数为特定的窗口指定一个新窗口位置
7 ~& d* n2 D. s4 `; |- HDestroyWindow 清除指定的窗口以及它的所有子窗口
9 c2 f: z7 J `( a. u2 iDrawAnimatedRects 描绘一系列动态矩形 & D- Z( q% F( L. V1 ]
EnableWindow 指定的窗口里允许或禁止所有鼠标及键盘输入
/ A0 \( ~# C2 dEndDeferWindowPos 同时更新DeferWindowPos调用时指定的所有窗口的位置及状态 ( r& h( v0 T! ~* ^2 L
EnumChildWindows 为指定的父窗口枚举子窗口
' K; k0 A2 h1 t$ ] \4 c7 k9 `' iEnumThreadWindows 枚举与指定任务相关的窗口 ( h$ |9 c9 l. a
EnumWindows 枚举窗口列表中的所有父窗口
$ {5 @( T" t: J' yEqualRect 判断两个矩形结构是否相同 4 ~# R8 N; ?; _$ P1 d! g
FindWindow 寻找窗口列表中第一个符合指定条件的顶级窗口 / `- Y! F" o3 S2 w" q; p- {9 ^
FindWindowEx 在窗口列表中寻找与指定条件相符的第一个子窗口
1 j4 b" H! S: r' N/ U4 |FlashWindow 闪烁显示指定窗口 9 }. ~- q! l. }9 }, n5 [ y0 O
GetActiveWindow 获得活动窗口的句柄 Z# u5 \& v5 c, w* z1 @+ B0 y" A
GetCapture 获得一个窗口的句柄,这个窗口位于当前输入线程,且拥有鼠标捕获(鼠标活动由它接收) % Y1 H: H- e, y7 {0 y& q
GetClassInfo 取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本,结构中包含了与指定类有关的信息
7 i2 q, ^" P k; f& Y- pGetClassLong 取得窗口类的一个Long变量条目
0 g2 S: {' }5 c' LGetClassName 为指定的窗口取得类名 & @" @ |& p) j# u0 s: Q* s: w
GetClassWord 为窗口类取得一个整数变量 $ f) X# G4 T' [. m
GetClientRect 返回指定窗口客户区矩形的大小
8 o* {6 w3 q- x/ @. A# R* mGetDesktopWindow 获得代表整个屏幕的一个窗口(桌面窗口)句柄
7 a- j& \$ w \# @# {7 iGetFocus 获得拥有输入焦点的窗口的句柄 * w( q+ B$ v; T& D, t
GetForegroundWindow 获得前台窗口的句柄
, C. C3 P+ Z* UGetLastActivePopup 获得在一个给定父窗口中最近激活过的弹出式窗口的句柄
' Q2 u: U r0 l$ H1 BGetParent 判断指定窗口的父窗口 6 k, c! | o1 w/ ?6 h- c: ?
GetTopWindow 搜索内部窗口列表,寻找隶属于指定窗口的头一个窗口的句柄 6 Q, `/ R; s4 a; r) y+ E2 B
GetUpdateRect 获得一个矩形,它描叙了指定窗口中需要更新的那一部分 2 W: f, n) E7 q* M
GetWindow 获得一个窗口的句柄,该窗口与某源窗口有特定的关系
1 F* C" Z* V+ ?$ b% L7 N0 ]" { kGetWindowContextHelpId 取得与窗口关联在一起的帮助场景ID 8 f% }& w! L' u: l4 k. z; e/ [
GetWindowLong 从指定窗口的结构中取得信息 6 M4 I& ^4 r7 C; ~( b$ g: r* h
GetWindowPlacement 获得指定窗口的状态及位置信息 / R' N G3 g6 C8 I2 X Q, i
GetWindowRect 获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内 6 f8 L5 P) K. ]
GetWindowText 取得一个窗体的标题(caption)文字,或者一个控件的内容 " ^) {+ p0 W* G( m
GetWindowTextLength 调查窗口标题文字或控件内容的长短 " V$ y1 K" E/ R% i X! Y
GetWindowWord 获得指定窗口结构的信息 , P6 Z& ?& P8 Z+ M/ a" N
InflateRect 增大或减小一个矩形的大小
) R+ G b; I& j% n9 x+ cIntersectRect 这个函数在lpDestRect里载入一个矩形,它是lpSrc1Rect与lpSrc2Rect两个矩形的交集 3 M: |4 R! b4 F [
InvalidateRect 屏蔽一个窗口客户区的全部或部分区域
3 W. r4 L2 F. _* N0 X# O# i* jIsChild 判断一个窗口是否为另一窗口的子或隶属窗口
6 S- @5 e0 f8 q6 |; t8 K4 YIsIconic 判断窗口是否已最小化 8 `& F' D+ B' i0 ?' \2 |$ h
IsRectEmpty 判断一个矩形是否为空 % ^3 g5 F9 x% M3 o
IsWindow 判断一个窗口句柄是否有效 - S6 E5 N* y# d, n
IsWindowEnabled 判断窗口是否处于活动状态
P* D; U7 j1 G6 pIsWindowUnicode 判断一个窗口是否为Unicode窗口。这意味着窗口为所有基于文本的消息都接收Unicode文字 % Y# M1 k5 }9 ]: S/ Z
IsWindowVisible 判断窗口是否可见
: s0 c. v- X) ]( q0 MIsZoomed 判断窗口是否最大化 " D) P7 X8 f' s5 j2 J& W$ _
LockWindowUpdate 锁定指定窗口,禁止它更新
m7 K, w/ f8 S0 `9 V, A& QMapWindowPoints 将一个窗口客户区坐标的点转换到另一窗口的客户区坐标系统
# X8 l& D# R3 o6 L, l7 IMoveWindow 改变指定窗口的位置和大小
; A2 `9 |( o2 e; O/ x7 U5 AOffsetRect 通过应用一个指定的偏移,从而让矩形移动起来
! m, x; B/ B" G* [" ~" ^8 FOpenIcon 恢复一个最小化的程序,并将其激活 * Q k/ Y1 z2 O! Z/ w3 U
PtInRect 判断指定的点是否位于矩形内部 & D8 ]4 {& ?" L8 N1 D; g
RedrawWindow 重画全部或部分窗口
9 r) A3 C6 Z/ v, A1 XReleaseCapture 为当前的应用程序释放鼠标捕获
/ b' ^+ P! a3 o5 ZScreenToClient 判断屏幕上一个指定点的客户区坐标
$ s4 v3 i6 u7 r8 ~: zScrollWindow 滚动窗口客户区的全部或一部分
2 s6 V, ]& s$ M" u6 y: h$ t! _ScrollWindowEx 根据附加的选项,滚动窗口客户区的全部或部分 6 s3 d) I& g6 g, F% D8 k! o: |
SetActiveWindow 激活指定的窗口 # }9 n, L5 \) J) K& J
SetCapture 将鼠标捕获设置到指定的窗口
. a8 u! F4 i, y6 bSetClassLong 为窗口类设置一个Long变量条目 - j |9 f d1 J. Q# {, w# {
SetClassWord 为窗口类设置一个条目
2 c0 n5 b2 C( ?+ d, b" [SetFocusAPI 将输入焦点设到指定的窗口。如有必要,会激活窗口 : j6 {7 ^' q& a- l, f5 j8 [( b
SetForegroundWindow 将窗口设为系统的前台窗口
% S9 H. ^/ Y5 @. t* OSetParent 指定一个窗口的新父
$ _8 k, h) W) a6 ]7 i& m/ @9 R7 wSetRect 设置指定矩形的内容 - N: q/ R2 R U5 F" _0 x
SetRectEmpty 将矩形设为一个空矩形 $ G8 d" R, H6 x! D$ M' F
SetWindowContextHelpId 为指定的窗口设置帮助场景(上下文)ID
9 m: a' o: W* C( zSetWindowLong 在窗口结构中为指定的窗口设置信息 ( a* [& q& i: b: e* k7 B
SetWindowPlacement 设置窗口状态和位置信息
0 V9 |2 U% a& ?SetWindowPos 为窗口指定一个新位置和状态
+ P: H6 A6 Z* Z" f( hSetWindowText 设置窗口的标题文字或控件的内容
% i: y& L! c. y2 e, ESetWindowWord 在窗口结构中为指定的窗口设置信息 7 I4 J7 }2 j7 }# P! `
ShowOwnedPopups 显示或隐藏由指定窗口所有的全部弹出式窗口
. O$ J6 Y" k' CShowWindow 控制窗口的可见性
, f% _. d) ^2 s6 Q+ d: jShowWindowAsync 与ShowWindow相似 2 Y6 ~9 x# v+ `6 ~, j
SubtractRect 装载矩形lprcDst,它是在矩形lprcSrc1中减去lprcSrc2得到的结果 L9 u- e" R) E- s2 o, _5 S
TileWindows 以平铺顺序排列窗口 3 N3 z; ]: [7 Z% G
UnionRect 装载一个lpDestRect目标矩形,它是lpSrc1Rect和lpSrc2Rect联合起来的结果
! g3 Y4 U9 ]7 f8 W* B/ CUpdateWindow 强制立即更新窗口 ! r* s+ g2 w6 h. U; f4 Q
ValidateRect 校验窗口的全部或部分客户区 3 F7 J; w0 Q' p' r
WindowFromPoint 返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口5 u! k4 Z0 v1 C
高级音频函数—参看《VC++ 编程指南.chm》11.6' p E7 ^6 K* K# y3 d
Windows提供了三个特殊的播放声音的高级音频函数:MessageBeep、PlaySound和sndPlaySound。这三个函数可以满足播放波形声音的一般需要,但它们播放的WAVE文件(波形声音文件)的大小不能超过100KB,如果要播放较大的WAVE文件,则应该使用MCI服务。
; r* \ @$ P4 P: |7 w BOOL MessageBeep(UINT uType);
: F" G, G; g6 N3 O0 b# C该函数主要用来播放系统报警声音。系统报警声音是由用户在控制面板中的声音(Sounds)程序中定义的,或者在WIN.INI的[sounds]段中指定。6 A) [* B/ S' I
参数uType说明了告警级,如下表所示。若成功则函数返回TRUE。
1 p, g# `7 l* i, y; }* q级别
" t: D1 Y# O% k8 y. y: R5 O8 Z N | 描述
* p) j& x6 l. r" f | -1 ' c8 R+ y$ [# P: V4 [1 B! U
| 从机器的扬声器中发出蜂鸣声。 " D" S' Q+ z1 ~6 i: J1 m$ ^- L
| MB_ICONASTERISK
+ d5 N8 ^& u* x o | 播放由SystemAsterisk定义的声音。
3 v n* w6 l( U/ e3 y4 }" c7 K | MB_ICONEXCLAMATION 7 \7 q6 P6 v0 u! D$ c. C1 X" x0 J
| 播放由SystemExclamation定义的声音。 ; W& m# v' G' k" J. K1 g# |- x% g
| MB_ICONHAND
2 y- S8 k( S- @+ Y | 播放由SystemHand定义的声音。 2 C$ _0 k1 H* R, g+ l/ {2 ^7 F
| MB_ICONQUESTION
" N: [: X: ]! |. Q, b4 X! b; j! t | 播放由SystemQuestion定义的声音。
# c# v( R; c' Z | MB_OK # e0 o2 l6 _" W7 @5 \, Z" {9 _: O
| 播放由SystemDefault定义的声音
: U% o/ m7 C6 ], C) v, v1 t | BOOL PlaySound(LPCSTR pszSound, HMODULE hmod, DWORD fdwSound);. V) N0 v* q O9 X
参数pszSound是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,或是WAV资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音。如果该参数为NULL则停止正在播放的声音。5 N! K& x: W' x: ?, P" P
参数hmod是应用程序的实例句柄,当播放WAV资源时要用到该参数,否则它必须为NULL。
* x+ G0 z1 n Y+ b9 H7 j参数fdwSound是标志的组合,如下表所示。若成功则函数返回TRUE,否则返回FALSE。
, f& y# j1 f" ?5 N3 F5 v" k标志
' Q, w3 J/ y. Y | 含义 " S- S" \* ^; o' S% N
| SND_APPLICATION ! E# X4 t- u# r6 F
| 用应用程序指定的关联来播放声音。 7 t% C' W7 Q- n& U" g2 W
| SND_ALIAS
& Z8 Z# _+ l8 [* e0 e1 X; K. f a9 v | pszSound参数指定了注册表或WIN.INI中的系统事件的别名。
; s0 I" C- D# B3 C `6 F9 R | SND_ALIAS_ID
) n( H# W+ d2 V; u h7 N% j+ j | pszSound参数指定了预定义的声音标识符。 5 ], C4 ?7 Q5 l: ~
| SND_ASYNC
9 ~2 Y+ [# [' }) C! n0 k1 n | 用异步方式播放声音,PlaySound函数在开始播放后立即返回。 1 X1 x! ~) z) t8 K$ t; e+ S! x- Z3 `" @
| SND_FILENAME
: ^- E# Y; ~- E& h. M, ` | pszSound参数指定了WAVE文件名。 2 M/ v( S$ H+ N; ~
| SND_LOOP
" |8 Q8 n8 {4 ?* q* Q. w9 I- q, W | 重复播放声音,必须与SND_ASYNC标志一块使用。 d3 [; G1 k% @
| SND_MEMORY 5 M" o+ \3 Y n- C P
| 播放载入到内存中的声音,此时pszSound是指向声音数据的指针。
+ q( C* G0 I1 S$ k9 v; { | SND_NODEFAULT
( P7 F/ J# S \+ v | 不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。 % o! Q# `5 o; N2 A8 h
| SND_NOSTOP 5 V+ V- @& v* p. W O1 f4 j
| PlaySound不打断原来的声音播出并立即返回FALSE。 ( U& Q1 _: N; L# z4 o& h% x. H
| SND_NOWAIT 2 Y: L0 Z6 F. M! X+ c7 l
| 如果驱动程序正忙则函数就不播放声音并立即返回。
* V0 B, Y- I6 \! \6 L0 V1 F; g | SND_PURGE
0 N) E* }2 o% k! X | 停止所有与调用任务有关的声音。若参数pszSound为NULL,就停止所有的声音,否则,停止pszSound指定的声音。 5 q. J/ C! m" w! T, K
| SND_RESOURCE % r4 L1 B* h+ W, n. j2 B
| pszSound参数是WAVE资源的标识符,这时要用到hmod参数。 8 @7 G7 O' }- J0 R
| SND_SYNC + P( P$ {! C! K
| 同步播放声音,在播放完后PlaySound函数才返回。 + |' R$ S! I& |* h
| BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound);, W- ^1 I x) v- ~. h4 A; R5 T
函数sndPlaySound的功能与PlaySound类似,但少了一个参数。除了不能指定资源名字外,参数lpszSound与PlaySound的是一样的。, T0 w- f, `; \2 a7 w2 S- e% h
MCI播放, P5 w2 z/ e8 H
所有的MCI命令字符串都是通过多媒体API函数mciSendString传递给MCI的,该函数的声明为:
9 s/ P6 L. `* h5 n% a3 X+ ]MCIERROR mciSendString(8 d/ W* i4 N$ T
LPCTSTR lpszCommand, //MCI命令字符串
6 W/ g+ W; B$ w3 k& V3 V; M9 [LPTSTR lpszReturnString, //存放反馈信息的缓冲区2 y i7 _5 h! ?; d
UINT cchReturn, //缓冲区的长度
0 n. P8 K. @- n% A. w- {HANDLE hwndCallback //回调窗口的句柄,一般为NULL$ I8 P' c, D$ N+ g
); //若成功则返回0,否则返回错误码。
$ G) @# G @# W! m6 k- x: F该函数返回的错误码可以用mciGetErrorString函数进行分析,该函数的声明为:- z) _) r1 l9 Y: R! i) C* L
BOOL mciGetErrorString(, Q# }) Q. T5 W* r- V; {. G
DWORD fdwError, //函数mciSendString或mciSendCommand返回的错误码
, z0 T% H3 k) ~5 ?LPTSTR lpszErrorText, //接收描述错误的字符串的缓冲区
! P t9 j, @: @UINT cchErrorText //缓冲区的长度
7 E! k( p3 [+ P);
: j: d3 H. G5 g& C$ @$ k8 ^ |
|