VB編程基礎課教程
更新時間:2007年03月14日 00:00:00 作者:
VB編程基礎課
什么是API API文本游覽器
API函數(shù)聲明 數(shù)據(jù)類型與"類型安全"
常 數(shù) 結 構
小 結 一些API函數(shù)集: 控件與消息函數(shù)、硬件與系統(tǒng)函數(shù)、菜單函數(shù)、繪圖函數(shù)
什么是API
首先,有必要向大家講一講,什么是API。所謂API本來是為C和C++程序員寫的。API說來說去,就是一種函數(shù),他們包含在一個附加名為DLL的動態(tài)連接庫文件中。用標準的定義來講,API就是Windows的32位應用程序編程接口,是一系列很復雜的函數(shù),消息和結構,它使編程人員可以用不同類型的編程語言編制出的運行在Windows95和Windows NT操作系統(tǒng)上的應用程序??梢哉f,如果你曾經學過VC,那么API對你來說不是什么問題。但是如果你沒有學過VC,或者你對Windows95的結構體系不熟悉,那么可以說,學習API將是一件很辛苦的事情。
如果你打開WINDOWS的SYSTEM文件夾,你可以發(fā)現(xiàn)其中有很多附加名為DLL的文件。一個DLL中包含的API函數(shù)并不只是一個,數(shù)十個,甚至是數(shù)百個。我們能都掌握它嘛?回答是否定的∶不可能掌握。但實際上,我們真的沒必要都掌握,只要重點掌握Windos系統(tǒng)本身自帶的API函數(shù)就可以了。但,在其中還應當拋開掉同VB本身自有的函數(shù)重復的函數(shù)。如,VB
的etAttr命令可以獲得文件屬性,SetAttr可以設置文件屬性。對API來講也有對應的函數(shù)
GetFileAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下來的也就5、600個。是的,也不少。但,我可以敢跟你說,只要你熟悉地掌握100個,那么你的編程水平比現(xiàn)在高出至少要兩倍。盡管人們說VB和WINDOWS具有密切的關系,但我認為,API更接近
WINDOWS。如果你學會了API,首要的收獲便是對WINDOWS體系結構的認識。這個收獲是來自不易的。
如果你不依靠API會怎么樣?我可以跟你說,絕大多是高級編程書本(當然這不是書的名程叫高級而高級的,而是在一開始的《本書內容》中指明《本書的閱讀對象是具有一定VB基礎的讀者》的那些書),首先提的問題一般大都是從API開始。因此可以說,你不學API,你大概將停留在初級水平,無法往上攀登。唯一的途徑也許就是向別人求救∶我快死了,快來救救我呀,這個怎么辦,那個怎么辦?煩不煩呢?當然,現(xiàn)在網上好人太多(包括我在內,嘻嘻),但,你應當明白,通過此途徑,你的手中出不了好的作品。這是因為缺乏這些知識你的腦子里根本行不成一種總體的設計構思。
API文本游覽器 [返回]
很多API函數(shù)都是很長很長的。想看什么樣子嗎?如下就是作為例子的API DdeClientTransaction函數(shù)∶
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,我想你肯定被嚇住了。你也許考慮,該不該繼續(xù)學下去。不過不要擔心,幸運的是Microsoft的設計家們?yōu)槲覀兲峁┝擞杏玫墓ぞ?,這便是API
文本查看器。
通過API文本查看器,我們可以方便地查找程序所需要的函數(shù)聲明、結構類型和常數(shù),然后將它復制到剪貼板,最后再粘貼到VB程序的代碼段中。在大多數(shù)情況下,只要我們確定了程序所需要的函數(shù)、結構和常數(shù)這三個方面后,就可以通過對API文本游覽器的以上操作將他們加入到程序段中,從而程序中可以使用這些函數(shù)了。這些是學習API最基本的常識問題,它遠遠占不到API的龐大的體系內容。今后我們把精力浪費(這絕不是浪費)在哪里呢?那就是∶
什么時候使用什么函數(shù),什么時候使用什么結構類型,什么時候使用什么常數(shù)。
API函數(shù)聲明
讓我們回想一下。在VB中,如何聲明函數(shù)呢?我想,如果你正在看此文,那么你絕對能夠回答得出這個問題。以下便是你應該很熟悉的函數(shù)聲明∶
Function SetFocus (ByVal hwnd As Long) As Long
即,這行代碼定義了名為SetFocus的函數(shù),此函數(shù)具有一個Long型數(shù)據(jù)類型的參數(shù),并按值傳遞(ByVal),函數(shù)執(zhí)行后將返回一個Long型數(shù)據(jù)。
API函數(shù)的聲明也很類似,如,API中的SetFocus 函數(shù)是這樣寫的∶
Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
有點復雜了一些。是的,是復雜了點。但我可以告訴你,除了這些多出來的部分,其他部分還是和你以前學到的東西是一樣的。函數(shù)在程序中的調用也是一樣。如:
Dim dl As Long
dl&=SetFoucs(Form1.Hwnd)
但,一點是清楚的。它不象你自己寫的程序那樣能夠看到里面的運行機理,也不像VB
自帶的函數(shù)那樣,能夠從VB的聯(lián)機幫助中查到其用法。唯一的方法就是去學、查VB以外的資料。
Declare 語句用于在模塊級別中聲明對動態(tài)鏈接庫 (DLL) 中外部過程的引用。對此,你只要記住任何API函數(shù)聲明都必須寫這個語句就可以了。
Iib 指明包含所聲明過程或函數(shù)的動態(tài)鏈接庫或代碼資源。也就是說,它說明的是,函數(shù)或過程從何而來的問題。
如在上例中,SetFocus Lib "user32"說明 函數(shù) SetFocus 來自 user32.dll文件。主要的dll動態(tài)連接庫文件有∶
user32.dll Windows管理。生成和管理應用程序的用戶接口。
GDI32.dll 圖形設備接口。產生Windows設備的圖形輸出
Kernel32.dll 系統(tǒng)服務。訪問操作系統(tǒng)的計算機資源。
注意,當DLL文件不在Windows或System文件夾中的時候,必須在函數(shù)中說明其出處(
路徑)。如,SetFocus Lib "c:\Mydll\user32"
函數(shù)聲明中的Alias 是可選的。表示將被調用的過程在動態(tài)鏈接庫 (DLL) 中還有另外的名稱(別名)。如,Alias "SetFocus" ,說明SetFocus函數(shù)在User32.dll中的另外一個名稱是,
SetFocus。怎么兩個名都一樣呢?當然,也可以是不同的。在很多情況下,Alias說明的函數(shù)名,即別名最后一個字符經常是字符A,如SetWindowsText函數(shù)的另一個名稱是
SetWindowsTextA,表示為Alias "SetWindowsTextA"。這個A只不過是設計家們的習慣的命名約定,表示函數(shù)屬于ANSI版本。
那么,別名究竟有什么用途呢?從理論上講,別名提供了用另一個名子調用API的函數(shù)方法。如果你指明了別名,那么 盡管我們按Declare語句后面的函數(shù)來調用該函數(shù),但在函數(shù)的實際調用上是以別名作為首要選擇的。如,以下兩個函數(shù)(Function,ABCD)聲明都是有效的,他們調用的是同一個 SetFocus函數(shù)∶
Declare Function SetFocus Lib "user32" "SetFocus" (ByVal hwnd As Long) As Long
Declare ABCD SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
需要注意的是,選用Alias的時候,應注意別名的大小寫;如果不選用Alias 時的時候,函數(shù)名必須注意大小寫,而且不能改動。當然,在很多情況下,由于函數(shù)聲明是直接從API
文本游覽器中拷貝過來的,所以這種錯誤的發(fā)生機會是很少的,但您有必要知道這一點。
最后提醒你一句,API聲明(包括結構、常數(shù))必須放在窗體或模塊的"通用(General Declarations)段。
數(shù)據(jù)類型與"類型安全"
API函數(shù)中使用的數(shù)據(jù)類型基本上和VB中的一樣。但作為WIN32的API函數(shù)中,不存在Integer
數(shù)據(jù)類型。另外一點是在API函數(shù)中看不到Boolean數(shù)據(jù)類型。 Variant數(shù)據(jù)類型在API函數(shù)中是以Any的形式出現(xiàn),如Data As Any。盡管其含義是允許任意參數(shù)類型作為一個該API函數(shù)的參數(shù)傳遞,但這樣做存在一定的缺點。其原因是,這將會使得對目標參數(shù)的所有類型檢查都會被關閉。這自然會給各種類型的參數(shù)調用帶來了產生錯誤的機會。
為了強制執(zhí)行嚴格的類型檢查,并避免上面提到的問題,一個辦法是在函數(shù)里使用上面提到到Alias技術。如對API函數(shù) GetDIBits 可進行另外一種聲明方法。如下∶
GetDIBits函數(shù)的原型∶
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
GetDIBits函數(shù)的改型∶
Public Declare Function GetDIBitsLong Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Long, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
通過本課程前面所學到的知識,我們已經可以得知原型 GetDIBits函數(shù)也好,改型 GetDIBitsLong函數(shù)也好,實際將調用的都是Alias所指定的 GetDIBits原函數(shù)。但你應當看到,兩者的區(qū)別在于,我們在改型的函數(shù)中強制指定lpBits參數(shù)為Long形。這樣就會使得函數(shù)調用中發(fā)生的錯誤機率減少到了最小。這種方法叫做"安全類型"聲明。
API函數(shù)中經常看到的數(shù)據(jù)類型有∶Long,String,Byte,Any....(也就這些吧。)
常 數(shù)
對于API常數(shù)來講,沒有什么太特別的學問。請看VB中的以下代碼∶
Msg = MsgBox("您好", vbOKCancel)
我們知道, vbOKCancel這個常數(shù)的值等于1。對上面的代碼我們完全可以這樣寫,而不會影響代碼的功能∶
Msg = MsgBox("您好", 1)
但你大概不太愿意選擇后一種,因為這會使得看懂代碼費勁起來。這種方法也被API采取了。只是API常數(shù)必須在事情之前做好初始化聲明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&
在常數(shù)的初始化中,有些程序使用Global,如Global Const ABM_ACTIVATE = &H6,但我認為Public完全可以代替它。過去我也用過Global,但現(xiàn)在不大用了。一會兒用這個,一會兒用那個,各程序之間不能保持一致性了,起碼看起來別扭。
結 構 [返回]
結構是C和C++語言中的說法。在VB中一般稱為自定義數(shù)據(jù)類型。想必很多朋友都已經認識它。在API領域里,我更喜歡把它叫做結構,因為API各種結構類型根本不是我定義(
自定義)的。
在VB中,API結構同樣由TYPE.......END TYPE語句來定義。如,在API中,點(Point)結構的定義方法如下:
Public Type POINTAPI
X As Long '點在X坐標(橫坐標)上的坐標值
Y As Long '點在Y坐標(縱坐標)上的坐標值
End Type
又如,API中矩形(Rect)結構的定義如下∶
Public Type RECT
Left As Long '矩形左上角的X坐標
Top As Long '矩形左上角的Y坐標
Right As Long '矩形右下角的X坐標
Bottom As Long '矩形右下角的Y坐標
End Type
這些內容同樣可以從API文本游覽器中拷貝過來。這些結構中的變量名可隨意改動,而不會影響結構本身。也就是說,這些成員變量都是虛擬的。如,POINTAPI結構可改為如下∶
Public Type POINTAPI
MyX As Long '點在X坐標(橫坐標)上的坐標值
MyY As Long '點在Y坐標(縱坐標)上的坐標值
End Type
不過,一般來講,是沒有這種必要的。結構本身是一種數(shù)據(jù)類型,因此,使用時必須聲明具體變量為該結構型,才能在程序中真正使用到該結構。結構的聲明方法和其他數(shù)據(jù)的聲明方法一樣,如,以下語句把變MyPoint聲明為POINTAPI結構類型∶
MyPoint As POINTAPI
引用結構中的成員變量也十分簡單,在結構名后面加上一個".",然后緊接著寫要引用的成員變量即可。這很象VB中的引用一個對象的某個屬性。如,假如我們把上面已經聲明的MyPoint結構中的X變量的值賦給變量Temp&
則代碼如下∶
Temp&=MyPoint.X
但,特別注意的是,你千萬不要認為上例中的MyPoint是一個值。它不是值,而是地址(
指針)。值和地址是完全不同的概念。結構要求按引用傳遞給WINDOWS函數(shù),即所有API
函數(shù)中,結構都是按ByRef傳遞的(在Declare語句 中ByRef是默認型)。對于結構的傳遞,你不要試圖采用ByVal,你將一無所獲。由于結構名實際上就是指向這個結構的指針(這個結構的首地址),所以,你也就傳送特定的結構名就可以了(參見小結,我用紅色字體來突出了這種傳遞方式)。
由于結構傳送的是指針,所以函數(shù)將直接對結構進行讀寫操作。這種特性很適合于把函數(shù)執(zhí)行的結果裝載在結構之中。
小 結 [返回]
以下的程序是為了總結本課中學到的內容而給出的。啟動VB,新建一個項目,添加一個命令按鈕,并把下面的代碼拷貝到代碼段中,運行它。
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI '定義點(Point)結構
X As Long '點在X坐標(橫坐標)上的坐標值
Y As Long '點在Y坐標(縱坐標)上的坐標值
End Type
Sub PrintCursorPos( )
Dim dl AS Long
Dim MyPoint As POINTAPI
dl&= GetCursorPos(MyPoint) '調用函數(shù),獲取屏幕鼠標坐標
Debug.Print "X=" & Str(MyPoint.X) & " and " & "Y=" & Str(MyPoint.Y)
End Sub
Private Sub Command1_Click()
PrintCursorPos
End Sub
輸出結果為(每次運行都可能得到不同的結果,這得由函數(shù)調用時鼠標指針在屏幕中所處的位置而決定)∶
X= 240 and Y= 151
程序中,GetCursorPos函數(shù)用來獲取鼠標指針在屏幕上的位置。
以上例子中,你可以發(fā)現(xiàn),以參數(shù)傳遞的MyPpint結構的內容在函數(shù)調用后發(fā)生了實質性變化。這是由于結構是按ByRef傳遞的原因。
一些API函數(shù)集 [返回]
Windows API
1.控件與消息函數(shù)
AdjustWindowRect 給定一種窗口樣式,計算獲得目標客戶區(qū)矩形所需的窗口大小
AnyPopup 判斷屏幕上是否存在任何彈出式窗口
ArrangeIconicWindows 排列一個父窗口的最小化子窗口
AttachThreadInput 連接線程輸入函數(shù)
BeginDeferWindowPos 啟動構建一系列新窗口位置的過程
BringWindowToTop 將指定的窗口帶至窗口列表頂部
CascadeWindows 以層疊方式排列窗口
ChildWindowFromPoint 返回父窗口中包含了指定點的第一個子窗口的句柄
ClientToScreen 判斷窗口內以客戶區(qū)坐標表示的一個點的屏幕坐標
CloseWindow 最小化指定的窗口
CopyRect 矩形內容復制
DeferWindowPos 該函數(shù)為特定的窗口指定一個新窗口位置
DestroyWindow 清除指定的窗口以及它的所有子窗口
DrawAnimatedRects 描繪一系列動態(tài)矩形
EnableWindow 指定的窗口里允許或禁止所有鼠標及鍵盤輸入
EndDeferWindowPos 同時更新DeferWindowPos調用時指定的所有窗口的位置及狀態(tài)
EnumChildWindows 為指定的父窗口枚舉子窗口
EnumThreadWindows 枚舉與指定任務相關的窗口
EnumWindows 枚舉窗口列表中的所有父窗口
EqualRect 判斷兩個矩形結構是否相同
FindWindow 尋找窗口列表中第一個符合指定條件的頂級窗口
FindWindowEx 在窗口列表中尋找與指定條件相符的第一個子窗口
FlashWindow 閃爍顯示指定窗口
GetActiveWindow 獲得活動窗口的句柄
GetCapture 獲得一個窗口的句柄,這個窗口位于當前輸入線程,且擁有鼠標捕獲(鼠標活動由它接收)
GetClassInfo 取得WNDCLASS結構(或WNDCLASSEX結構)的一個副本,結構中包含了與指定類有關的信息
GetClassLong 取得窗口類的一個Long變量條目
GetClassName 為指定的窗口取得類名
GetClassWord 為窗口類取得一個整數(shù)變量
GetClientRect 返回指定窗口客戶區(qū)矩形的大小
GetDesktopWindow 獲得代表整個屏幕的一個窗口(桌面窗口)句柄
GetFocus 獲得擁有輸入焦點的窗口的句柄
GetForegroundWindow 獲得前臺窗口的句柄
GetLastActivePopup 獲得在一個給定父窗口中最近激活過的彈出式窗口的句柄
GetLastError 針對之前調用的api函數(shù),用這個函數(shù)取得擴展錯誤信息
GetParent 判斷指定窗口的父窗口
GetTopWindow 搜索內部窗口列表,尋找隸屬于指定窗口的頭一個窗口的句柄
GetUpdateRect 獲得一個矩形,它描敘了指定窗口中需要更新的那一部分
GetWindow 獲得一個窗口的句柄,該窗口與某源窗口有特定的關系
GetWindowContextHelpId 取得與窗口關聯(lián)在一起的幫助場景ID
GetWindowLong 從指定窗口的結構中取得信息
GetWindowPlacement 獲得指定窗口的狀態(tài)及位置信息
GetWindowRect 獲得整個窗口的范圍矩形,窗口的邊框、標題欄、滾動條及菜單等都在這個矩形內
GetWindowText 取得一個窗體的標題(caption)文字,或者一個控件的內容
GetWindowTextLength 調查窗口標題文字或控件內容的長短
GetWindowWord 獲得指定窗口結構的信息
InflateRect 增大或減小一個矩形的大小
IntersectRect 這個函數(shù)在lpDestRect里載入一個矩形,它是lpSrc1Rect與lpSrc2Rect兩個矩形的交集
InvalidateRect 屏蔽一個窗口客戶區(qū)的全部或部分區(qū)域
IsChild 判斷一個窗口是否為另一窗口的子或隸屬窗口
IsIconic 判斷窗口是否已最小化
IsRectEmpty 判斷一個矩形是否為空
IsWindow 判斷一個窗口句柄是否有效
IsWindowEnabled 判斷窗口是否處于活動狀態(tài)
IsWindowUnicode 判斷一個窗口是否為Unicode窗口。這意味著窗口為所有基于文本的消息都接收Unicode文字
IsWindowVisible 判斷窗口是否可見
IsZoomed 判斷窗口是否最大化
LockWindowUpdate 鎖定指定窗口,禁止它更新
MapWindowPoints 將一個窗口客戶區(qū)坐標的點轉換到另一窗口的客戶區(qū)坐標系統(tǒng)
MoveWindow 改變指定窗口的位置和大小
OffsetRect 通過應用一個指定的偏移,從而讓矩形移動起來
OpenIcon 恢復一個最小化的程序,并將其激活
PtInRect 判斷指定的點是否位于矩形內部
RedrawWindow 重畫全部或部分窗口
ReleaseCapture 為當前的應用程序釋放鼠標捕獲
ScreenToClient 判斷屏幕上一個指定點的客戶區(qū)坐標
ScrollWindow 滾動窗口客戶區(qū)的全部或一部分
ScrollWindowEx 根據(jù)附加的選項,滾動窗口客戶區(qū)的全部或部分
SetActiveWindow 激活指定的窗口
SetCapture 將鼠標捕獲設置到指定的窗口
SetClassLong 為窗口類設置一個Long變量條目
SetClassWord 為窗口類設置一個條目
SetFocusAPI 將輸入焦點設到指定的窗口。如有必要,會激活窗口
SetForegroundWindow 將窗口設為系統(tǒng)的前臺窗口
SetParent 指定一個窗口的新父
SetRect 設置指定矩形的內容
SetRectEmpty 將矩形設為一個空矩形
SetWindowContextHelpId 為指定的窗口設置幫助場景(上下文)ID
SetWindowLong 在窗口結構中為指定的窗口設置信息
SetWindowPlacement 設置窗口狀態(tài)和位置信息
SetWindowPos 為窗口指定一個新位置和狀態(tài)
SetWindowText 設置窗口的標題文字或控件的內容
SetWindowWord 在窗口結構中為指定的窗口設置信息
ShowOwnedPopups 顯示或隱藏由指定窗口所有的全部彈出式窗口
ShowWindow 控制窗口的可見性
ShowWindowAsync 與ShowWindow相似
SubtractRect 裝載矩形lprcDst,它是在矩形lprcSrc1中減去lprcSrc2得到的結果
TileWindows 以平鋪順序排列窗口
UnionRect 裝載一個lpDestRect目標矩形,它是lpSrc1Rect和lpSrc2Rect聯(lián)合起來的結果
UpdateWindow 強制立即更新窗口
ValidateRect 校驗窗口的全部或部分客戶區(qū)
WindowFromPoint 返回包含了指定點的窗口的句柄。忽略屏蔽、隱藏以及透明窗口
2.硬件與系統(tǒng)函數(shù)
ActivateKeyboardLayout 激活一個新的鍵盤布局。鍵盤布局定義了按鍵在一種物理性鍵盤上的位置與含義
Beep 用于生成簡單的聲音
CharToOem 將一個字串從ANSI字符集轉換到OEM字符集
ClipCursor 將指針限制到指定區(qū)域
ConvertDefaultLocale 將一個特殊的地方標識符轉換成真實的地方ID
CreateCaret 根據(jù)指定的信息創(chuàng)建一個插入符(光標),并將它選定為指定窗口的默認插入符
DestroyCaret 清除(破壞)一個插入符
EnumCalendarInfo 枚舉在指定“地方”環(huán)境中可用的日歷信息
EnumDateFormats 列舉指定的“當?shù)亍痹O置中可用的長、短日期格式
EnumSystemCodePages 枚舉系統(tǒng)中已安裝或支持的代碼頁
EnumSystemLocales 枚舉系統(tǒng)已經安裝或提供支持的“地方”設置
EnumTimeFormats 枚舉一個指定的地方適用的時間格式
ExitWindowsEx 退出windows,并用特定的選項重新啟動
ExpandEnvironmentStrings 擴充環(huán)境字串
FreeEnvironmentStrings 翻譯指定的環(huán)境字串塊
GetACP 判斷目前正在生效的ANSI代碼頁
GetAsyncKeyState 判斷函數(shù)調用時指定虛擬鍵的狀態(tài)
GetCaretBlinkTime 判斷插入符光標的閃爍頻率
GetCaretPos 判斷插入符的當前位置
GetClipCursor 取得一個矩形,用于描述目前為鼠標指針規(guī)定的剪切區(qū)域
GetCommandLine 獲得指向當前命令行緩沖區(qū)的一個指針
GetComputerName 取得這臺計算機的名稱
GetCPInfo 取得與指定代碼頁有關的信息
GetCurrencyFormat 針對指定的“地方”設置,根據(jù)貨幣格式格式化一個數(shù)字
GetCursor 獲取目前選擇的鼠標指針的句柄
GetCursorPos 獲取鼠標指針的當前位置
GetDateFormat 針對指定的“當?shù)亍备袷?,對一個系統(tǒng)日期進行格式化
GetDoubleClickTime 判斷連續(xù)兩次鼠標單擊之間會被處理成雙擊事件的間隔時間
GetEnvironmentStrings 為包含了當前環(huán)境字串設置的一個內存塊分配和返回一個句柄
GetEnvironmentVariable 取得一個環(huán)境變量的值
GetInputState 判斷是否存在任何待決(等待處理)的鼠標或鍵盤事件
GetKBCodePage 由GetOEMCP取代,兩者功能完全相同
GetKeyboardLayout 取得一個句柄,描述指定應用程序的鍵盤布局
GetKeyboardLayoutList 獲得系統(tǒng)適用的所有鍵盤布局的一個列表
GetKeyboardLayoutName 取得當前活動鍵盤布局的名稱
GetKeyboardState 取得鍵盤上每個虛擬鍵當前的狀態(tài)
GetKeyboardType 了解與正在使用的鍵盤有關的信息
GetKeyNameText 在給出掃描碼的前提下,判斷鍵名
GetKeyState 針對已處理過的按鍵,在最近一次輸入信息時,判斷指定虛擬鍵的狀態(tài)
GetLastError 針對之前調用的api函數(shù),用這個函數(shù)取得擴展錯誤信息
GetLocaleInfo 取得與指定“地方”有關的信息
GetLocalTime 取得本地日期和時間
GetNumberFormat 針對指定的“地方”,按特定的格式格式化一個數(shù)字
GetOEMCP 判斷在OEM和ANSI字符集間轉換的windows代碼頁
GetQueueStatus 判斷應用程序消息隊列中待決(等待處理)的消息類型
GetSysColor 判斷指定windows顯示對象的顏色
GetSystemDefaultLangID 取得系統(tǒng)的默認語言ID
GetSystemDefaultLCID 取得當前的默認系統(tǒng)“地方”
GetSystemInfo 取得與底層硬件平臺有關的信息
GetSystemMetrics 返回與windows環(huán)境有關的信息
GetSystemPowerStatus 獲得與當前系統(tǒng)電源狀態(tài)有關的信息
GetSystemTime 取得當前系統(tǒng)時間,這個時間采用的是“協(xié)同世界時間”(即UTC,也叫做GMT)格式
GetSystemTimeAdjustment 使內部系統(tǒng)時鐘與一個外部的時鐘信號源同步
GetThreadLocale 取得當前線程的地方ID
GetTickCount 用于獲取自windows啟動以來經歷的時間長度(毫秒)
GetTimeFormat 針對當前指定的“地方”,按特定的格式格式化一個系統(tǒng)時間
GetTimeZoneInformation 取得與系統(tǒng)時區(qū)設置有關的信息
GetUserDefaultLangID 為當前用戶取得默認語言ID
GetUserDefaultLCID 取得當前用戶的默認“地方”設置
GetUserName 取得當前用戶的名字
GetVersion 判斷當前運行的Windows和DOS版本
GetVersionEx 取得與平臺和操作系統(tǒng)有關的版本信息
HideCaret 在指定的窗口隱藏插入符(光標)
IsValidCodePage 判斷一個代碼頁是否有效
IsValidLocale 判斷地方標識符是否有效
keybd_event 這個函數(shù)模擬了鍵盤行動
LoadKeyboardLayout 載入一個鍵盤布局
MapVirtualKey 根據(jù)指定的映射類型,執(zhí)行不同的掃描碼和字符轉換
MapVirtualKeyEx 根據(jù)指定的映射類型,執(zhí)行不同的掃描碼和字符轉換
MessageBeep 播放一個系統(tǒng)聲音。系統(tǒng)聲音的分配方案是在控制面板里決定的
mouse_event 模擬一次鼠標事件
OemKeyScan 判斷OEM字符集中的一個ASCII字符的掃描碼和Shift鍵狀態(tài)
OemToChar 將OEM字符集的一個字串轉換到ANSI字符集
SetCaretBlinkTime 指定插入符(光標)的閃爍頻率
SetCaretPos 指定插入符的位置
SetComputerName 設置新的計算機名
SetCursor 將指定的鼠標指針設為當前指針
SetCursorPos 設置指針的位置
SetDoubleClickTime 設置連續(xù)兩次鼠標單擊之間能使系統(tǒng)認為是雙擊事件的間隔時間
SetEnvironmentVariable 將一個環(huán)境變量設為指定的值
SetKeyboardState 設置每個虛擬鍵當前在鍵盤上的狀態(tài)
SetLocaleInfo 改變用戶“地方”設置信息
SetLocalTime 設置當前地方時間
SetSysColors 設置指定窗口顯示對象的顏色
SetSystemCursor 改變任何一個標準系統(tǒng)指針
SetSystemTime 設置當前系統(tǒng)時間
SetSystemTimeAdjustment 定時添加一個校準值使內部系統(tǒng)時鐘與一個外部的時鐘信號源同步
SetThreadLocale 為當前線程設置地方
SetTimeZoneInformation 設置系統(tǒng)時區(qū)信息
ShowCaret 在指定的窗口里顯示插入符(光標)
ShowCursor 控制鼠標指針的可視性
SwapMouseButton 決定是否互換鼠標左右鍵的功能
SystemParametersInfo 獲取和設置數(shù)量眾多的windows系統(tǒng)參數(shù)
SystemTimeToTzSpecificLocalTime 將系統(tǒng)時間轉換成地方時間
ToAscii 根據(jù)當前的掃描碼和鍵盤信息,將一個虛擬鍵轉換成ASCII字符
ToUnicode 根據(jù)當前的掃描碼和鍵盤信息,將一個虛擬鍵轉換成Unicode字符
UnloadKeyboardLayout 卸載指定的鍵盤布局
VkKeyScan 針對Windows字符集中一個ASCII字符,判斷虛擬鍵碼和Shift鍵的狀態(tài)
完
3.菜單函數(shù)
AppendMenu 在指定的菜單里添加一個菜單項
CheckMenuItem 復選或撤消復選指定的菜單條目
CheckMenuRadioItem 指定一個菜單條目被復選成“單選”項目
CreateMenu 創(chuàng)建新菜單
CreatePopupMenu 創(chuàng)建一個空的彈出式菜單
DeleteMenu 刪除指定的菜單條目
DestroyMenu 刪除指定的菜單
DrawMenuBar 為指定的窗口重畫菜單
EnableMenuItem 允許或禁止指定的菜單條目
GetMenu 取得窗口中一個菜單的句柄
GetMenuCheckMarkDimensions 返回一個菜單復選符的大小
GetMenuContextHelpId 取得一個菜單的幫助場景ID
GetMenuDefaultItem 判斷菜單中的哪個條目是默認條目
GetMenuItemCount 返回菜單中條目(菜單項)的數(shù)量
GetMenuItemID 返回位于菜單中指定位置處的條目的菜單ID
GetMenuItemInfo 取得(接收)與一個菜單條目有關的特定信息
GetMenuItemRect 在一個矩形中裝載指定菜單條目的屏幕坐標信息
GetMenuState 取得與指定菜單條目狀態(tài)有關的信息
GetMenuString 取得指定菜單條目的字串
GetSubMenu 取得一個彈出式菜單的句柄,它位于菜單中指定的位置
GetSystemMenu 取得指定窗口的系統(tǒng)菜單的句柄
HiliteMenuItem 控制頂級菜單條目的加亮顯示狀態(tài)
InsertMenu 在菜單的指定位置處插入一個菜單條目,并根據(jù)需要將其他條目向下移動
InsertMenuItem 插入一個新菜單條目
IsMenu 判斷指定的句柄是否為一個菜單的句柄
LoadMenu 從指定的模塊或應用程序實例中載入一個菜單
LoadMenuIndirect 載入一個菜單
MenuItemFromPoint 判斷哪個菜單條目包含了屏幕上一個指定的點
ModifyMenu 改變菜單條目
RemoveMenu 刪除指定的菜單條目
SetMenu 設置窗口菜單
SetMenuContextHelpId 設置一個菜單的幫助場景ID
SetMenuDefaultItem 將一個菜單條目設為默認條目
SetMenuItemBitmaps 設置一幅特定位圖,令其在指定的菜單條目中使用,代替標準的復選符號(√)
SetMenuItemInfo 為一個菜單條目設置指定的信息
TrackPopupMenu 在屏幕的任意地方顯示一個彈出式菜單
TrackPopupMenuEx 與TrackPopupMenu相似,只是它提供了額外的功能
完
以下是幾個關于菜單函數(shù)的類型定義
MENUITEMINFO 這個結構包含了菜單條目的信息
TPMPARAMS 這個結構用于TrackPopupMenuEx函數(shù)以支持額外的功能
4.繪圖函數(shù)
AbortPath 拋棄選入指定設備場景中的所有路徑。也取消目前正在進行的任何路徑的創(chuàng)建工作
AngleArc 用一個連接弧畫一條線
Arc 畫一個圓弧
BeginPath 啟動一個路徑分支
CancelDC 取消另一個線程里的長時間繪圖操作
Chord 畫一個弦
CloseEnhMetaFile 關閉指定的增強型圖元文件設備場景,并將新建的圖元文件返回一個句柄
CloseFigure 描繪到一個路徑時,關閉當前打開的圖形
CloseMetaFile 關閉指定的圖元文件設備場景,并向新建的圖元文件返回一個句柄
CopyEnhMetaFile 制作指定增強型圖元文件的一個副本(拷貝)
CopyMetaFile 制作指定(標準)圖元文件的一個副本
CreateBrushIndirect 在一個LOGBRUSH數(shù)據(jù)結構的基礎上創(chuàng)建一個刷子
CreateDIBPatternBrush 用一幅與設備無關的位圖創(chuàng)建一個刷子,以便指定刷子樣式(圖案)
CreateEnhMetaFile 創(chuàng)建一個增強型的圖元文件設備場景
CreateHatchBrush 創(chuàng)建帶有陰影圖案的一個刷子
CreateMetaFile 創(chuàng)建一個圖元文件設備場景
CreatePatternBrush 用指定了刷子圖案的一幅位圖創(chuàng)建一個刷子
CreatePen 用指定的樣式、寬度和顏色創(chuàng)建一個畫筆
CreatePenIndirect 根據(jù)指定的LOGPEN結構創(chuàng)建一個畫筆
CreateSolidBrush 用純色創(chuàng)建一個刷子
DeleteEnhMetaFile 刪除指定的增強型圖元文件
DeleteMetaFile 刪除指定的圖元文件
DeleteObject 刪除GDI對象,對象使用的所有系統(tǒng)資源都會被釋放
DrawEdge 用指定的樣式描繪一個矩形的邊框
DrawEscape 換碼(Escape)函數(shù)將數(shù)據(jù)直接發(fā)至顯示設備驅動程序
DrawFocusRect 畫一個焦點矩形
DrawFrameControl 描繪一個標準控件
DrawState 為一幅圖象或繪圖操作應用各式各樣的效果
Ellipse 描繪一個橢圓,由指定的矩形圍繞
EndPath 停止定義一個路徑
EnumEnhMetaFile 針對一個增強型圖元文件,列舉其中單獨的圖元文件記錄
EnumMetaFile 為一個標準的windows圖元文件枚舉單獨的圖元文件記錄
EnumObjects 枚舉可隨同指定設備場景使用的畫筆和刷子
ExtCreatePen 創(chuàng)建一個擴展畫筆(裝飾或幾何)
ExtFloodFill 在指定的設備場景里,用當前選擇的刷子填充一個區(qū)域
FillPath 關閉路徑中任何打開的圖形,并用當前刷子填充
FillRect 用指定的刷子填充一個矩形
FlattenPath 將一個路徑中的所有曲線都轉換成線段
FloodFill 用當前選定的刷子在指定的設備場景中填充一個區(qū)域
FrameRect 用指定的刷子圍繞一個矩形畫一個邊框
GdiComment 為指定的增強型圖元文件設備場景添加一條注釋信息
GdiFlush 執(zhí)行任何未決的繪圖操作
GdiGetBatchLimit 判斷有多少個GDI繪圖命令位于隊列中
GdiSetBatchLimit 指定有多少個GDI繪圖命令能夠進入隊列
GetArcDirection 畫圓弧的時候,判斷當前采用的繪圖方向
GetBkColor 取得指定設備場景當前的背景顏色
GetBkMode 針對指定的設備場景,取得當前的背景填充模式
GetBrushOrgEx 判斷指定設備場景中當前選定刷子起點
GetCurrentObject 獲得指定類型的當前選定對象
GetCurrentPositionEx 在指定的設備場景中取得當前的畫筆位置
GetEnhMetaFile 取得磁盤文件中包含的一個增強型圖元文件的圖元文件句柄
GetEnhMetaFileBits 將指定的增強型圖元文件復制到一個內存緩沖區(qū)里
GetEnhMetaFileDescription 返回對一個增強型圖元文件的說明
GetEnhMetaFileHeader 取得增強型圖元文件的圖元文件頭
GetEnhMetaFilePaletteEntries 取得增強型圖元文件的全部或部分調色板
GetMetaFile 取得包含在一個磁盤文件中的圖元文件的圖元文件句柄
GetMetaFileBitsEx 將指定的圖元文件復制到一個內存緩沖區(qū)
GetMiterLimit 取得設備場景的斜率限制(Miter)設置
GetNearestColor 根據(jù)設備的顯示能力,取得與指定顏色最接近的一種純色
GetObjectAPI 取得對指定對象進行說明的一個結構
GetObjectType 判斷由指定句柄引用的GDI對象的類型
GetPath 取得對當前路徑進行定義的一系列數(shù)據(jù)
GetPixel 在指定的設備場景中取得一個像素的RGB值
GetPolyFillMode 針對指定的設備場景,獲得多邊形填充模式
GetROP2 針對指定的設備場景,取得當前的繪圖模式
GetStockObject 取得一個固有對象(Stock)
GetSysColorBrush 為任何一種標準系統(tǒng)顏色取得一個刷子
GetWinMetaFileBits 通過在一個緩沖區(qū)中填充用于標準圖元文件的數(shù)據(jù),將一個增強型圖元文件轉換成標準windows圖元文件
InvertRect 通過反轉每個像素的值,從而反轉一個設備場景中指定的矩形
LineDDA 枚舉指定線段中的所有點
LineTo 用當前畫筆畫一條線,從當前位置連到一個指定的點
什么是API API文本游覽器
API函數(shù)聲明 數(shù)據(jù)類型與"類型安全"
常 數(shù) 結 構
小 結 一些API函數(shù)集: 控件與消息函數(shù)、硬件與系統(tǒng)函數(shù)、菜單函數(shù)、繪圖函數(shù)
什么是API
首先,有必要向大家講一講,什么是API。所謂API本來是為C和C++程序員寫的。API說來說去,就是一種函數(shù),他們包含在一個附加名為DLL的動態(tài)連接庫文件中。用標準的定義來講,API就是Windows的32位應用程序編程接口,是一系列很復雜的函數(shù),消息和結構,它使編程人員可以用不同類型的編程語言編制出的運行在Windows95和Windows NT操作系統(tǒng)上的應用程序??梢哉f,如果你曾經學過VC,那么API對你來說不是什么問題。但是如果你沒有學過VC,或者你對Windows95的結構體系不熟悉,那么可以說,學習API將是一件很辛苦的事情。
如果你打開WINDOWS的SYSTEM文件夾,你可以發(fā)現(xiàn)其中有很多附加名為DLL的文件。一個DLL中包含的API函數(shù)并不只是一個,數(shù)十個,甚至是數(shù)百個。我們能都掌握它嘛?回答是否定的∶不可能掌握。但實際上,我們真的沒必要都掌握,只要重點掌握Windos系統(tǒng)本身自帶的API函數(shù)就可以了。但,在其中還應當拋開掉同VB本身自有的函數(shù)重復的函數(shù)。如,VB
的etAttr命令可以獲得文件屬性,SetAttr可以設置文件屬性。對API來講也有對應的函數(shù)
GetFileAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下來的也就5、600個。是的,也不少。但,我可以敢跟你說,只要你熟悉地掌握100個,那么你的編程水平比現(xiàn)在高出至少要兩倍。盡管人們說VB和WINDOWS具有密切的關系,但我認為,API更接近
WINDOWS。如果你學會了API,首要的收獲便是對WINDOWS體系結構的認識。這個收獲是來自不易的。
如果你不依靠API會怎么樣?我可以跟你說,絕大多是高級編程書本(當然這不是書的名程叫高級而高級的,而是在一開始的《本書內容》中指明《本書的閱讀對象是具有一定VB基礎的讀者》的那些書),首先提的問題一般大都是從API開始。因此可以說,你不學API,你大概將停留在初級水平,無法往上攀登。唯一的途徑也許就是向別人求救∶我快死了,快來救救我呀,這個怎么辦,那個怎么辦?煩不煩呢?當然,現(xiàn)在網上好人太多(包括我在內,嘻嘻),但,你應當明白,通過此途徑,你的手中出不了好的作品。這是因為缺乏這些知識你的腦子里根本行不成一種總體的設計構思。
API文本游覽器 [返回]
很多API函數(shù)都是很長很長的。想看什么樣子嗎?如下就是作為例子的API DdeClientTransaction函數(shù)∶
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,我想你肯定被嚇住了。你也許考慮,該不該繼續(xù)學下去。不過不要擔心,幸運的是Microsoft的設計家們?yōu)槲覀兲峁┝擞杏玫墓ぞ?,這便是API
文本查看器。
通過API文本查看器,我們可以方便地查找程序所需要的函數(shù)聲明、結構類型和常數(shù),然后將它復制到剪貼板,最后再粘貼到VB程序的代碼段中。在大多數(shù)情況下,只要我們確定了程序所需要的函數(shù)、結構和常數(shù)這三個方面后,就可以通過對API文本游覽器的以上操作將他們加入到程序段中,從而程序中可以使用這些函數(shù)了。這些是學習API最基本的常識問題,它遠遠占不到API的龐大的體系內容。今后我們把精力浪費(這絕不是浪費)在哪里呢?那就是∶
什么時候使用什么函數(shù),什么時候使用什么結構類型,什么時候使用什么常數(shù)。
API函數(shù)聲明
讓我們回想一下。在VB中,如何聲明函數(shù)呢?我想,如果你正在看此文,那么你絕對能夠回答得出這個問題。以下便是你應該很熟悉的函數(shù)聲明∶
Function SetFocus (ByVal hwnd As Long) As Long
即,這行代碼定義了名為SetFocus的函數(shù),此函數(shù)具有一個Long型數(shù)據(jù)類型的參數(shù),并按值傳遞(ByVal),函數(shù)執(zhí)行后將返回一個Long型數(shù)據(jù)。
API函數(shù)的聲明也很類似,如,API中的SetFocus 函數(shù)是這樣寫的∶
Declare Function SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
有點復雜了一些。是的,是復雜了點。但我可以告訴你,除了這些多出來的部分,其他部分還是和你以前學到的東西是一樣的。函數(shù)在程序中的調用也是一樣。如:
Dim dl As Long
dl&=SetFoucs(Form1.Hwnd)
但,一點是清楚的。它不象你自己寫的程序那樣能夠看到里面的運行機理,也不像VB
自帶的函數(shù)那樣,能夠從VB的聯(lián)機幫助中查到其用法。唯一的方法就是去學、查VB以外的資料。
Declare 語句用于在模塊級別中聲明對動態(tài)鏈接庫 (DLL) 中外部過程的引用。對此,你只要記住任何API函數(shù)聲明都必須寫這個語句就可以了。
Iib 指明包含所聲明過程或函數(shù)的動態(tài)鏈接庫或代碼資源。也就是說,它說明的是,函數(shù)或過程從何而來的問題。
如在上例中,SetFocus Lib "user32"說明 函數(shù) SetFocus 來自 user32.dll文件。主要的dll動態(tài)連接庫文件有∶
user32.dll Windows管理。生成和管理應用程序的用戶接口。
GDI32.dll 圖形設備接口。產生Windows設備的圖形輸出
Kernel32.dll 系統(tǒng)服務。訪問操作系統(tǒng)的計算機資源。
注意,當DLL文件不在Windows或System文件夾中的時候,必須在函數(shù)中說明其出處(
路徑)。如,SetFocus Lib "c:\Mydll\user32"
函數(shù)聲明中的Alias 是可選的。表示將被調用的過程在動態(tài)鏈接庫 (DLL) 中還有另外的名稱(別名)。如,Alias "SetFocus" ,說明SetFocus函數(shù)在User32.dll中的另外一個名稱是,
SetFocus。怎么兩個名都一樣呢?當然,也可以是不同的。在很多情況下,Alias說明的函數(shù)名,即別名最后一個字符經常是字符A,如SetWindowsText函數(shù)的另一個名稱是
SetWindowsTextA,表示為Alias "SetWindowsTextA"。這個A只不過是設計家們的習慣的命名約定,表示函數(shù)屬于ANSI版本。
那么,別名究竟有什么用途呢?從理論上講,別名提供了用另一個名子調用API的函數(shù)方法。如果你指明了別名,那么 盡管我們按Declare語句后面的函數(shù)來調用該函數(shù),但在函數(shù)的實際調用上是以別名作為首要選擇的。如,以下兩個函數(shù)(Function,ABCD)聲明都是有效的,他們調用的是同一個 SetFocus函數(shù)∶
Declare Function SetFocus Lib "user32" "SetFocus" (ByVal hwnd As Long) As Long
Declare ABCD SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
需要注意的是,選用Alias的時候,應注意別名的大小寫;如果不選用Alias 時的時候,函數(shù)名必須注意大小寫,而且不能改動。當然,在很多情況下,由于函數(shù)聲明是直接從API
文本游覽器中拷貝過來的,所以這種錯誤的發(fā)生機會是很少的,但您有必要知道這一點。
最后提醒你一句,API聲明(包括結構、常數(shù))必須放在窗體或模塊的"通用(General Declarations)段。
數(shù)據(jù)類型與"類型安全"
API函數(shù)中使用的數(shù)據(jù)類型基本上和VB中的一樣。但作為WIN32的API函數(shù)中,不存在Integer
數(shù)據(jù)類型。另外一點是在API函數(shù)中看不到Boolean數(shù)據(jù)類型。 Variant數(shù)據(jù)類型在API函數(shù)中是以Any的形式出現(xiàn),如Data As Any。盡管其含義是允許任意參數(shù)類型作為一個該API函數(shù)的參數(shù)傳遞,但這樣做存在一定的缺點。其原因是,這將會使得對目標參數(shù)的所有類型檢查都會被關閉。這自然會給各種類型的參數(shù)調用帶來了產生錯誤的機會。
為了強制執(zhí)行嚴格的類型檢查,并避免上面提到的問題,一個辦法是在函數(shù)里使用上面提到到Alias技術。如對API函數(shù) GetDIBits 可進行另外一種聲明方法。如下∶
GetDIBits函數(shù)的原型∶
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
GetDIBits函數(shù)的改型∶
Public Declare Function GetDIBitsLong Lib "gdi32" Alias "GetDIBits" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Long, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
通過本課程前面所學到的知識,我們已經可以得知原型 GetDIBits函數(shù)也好,改型 GetDIBitsLong函數(shù)也好,實際將調用的都是Alias所指定的 GetDIBits原函數(shù)。但你應當看到,兩者的區(qū)別在于,我們在改型的函數(shù)中強制指定lpBits參數(shù)為Long形。這樣就會使得函數(shù)調用中發(fā)生的錯誤機率減少到了最小。這種方法叫做"安全類型"聲明。
API函數(shù)中經常看到的數(shù)據(jù)類型有∶Long,String,Byte,Any....(也就這些吧。)
常 數(shù)
對于API常數(shù)來講,沒有什么太特別的學問。請看VB中的以下代碼∶
Msg = MsgBox("您好", vbOKCancel)
我們知道, vbOKCancel這個常數(shù)的值等于1。對上面的代碼我們完全可以這樣寫,而不會影響代碼的功能∶
Msg = MsgBox("您好", 1)
但你大概不太愿意選擇后一種,因為這會使得看懂代碼費勁起來。這種方法也被API采取了。只是API常數(shù)必須在事情之前做好初始化聲明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&
在常數(shù)的初始化中,有些程序使用Global,如Global Const ABM_ACTIVATE = &H6,但我認為Public完全可以代替它。過去我也用過Global,但現(xiàn)在不大用了。一會兒用這個,一會兒用那個,各程序之間不能保持一致性了,起碼看起來別扭。
結 構 [返回]
結構是C和C++語言中的說法。在VB中一般稱為自定義數(shù)據(jù)類型。想必很多朋友都已經認識它。在API領域里,我更喜歡把它叫做結構,因為API各種結構類型根本不是我定義(
自定義)的。
在VB中,API結構同樣由TYPE.......END TYPE語句來定義。如,在API中,點(Point)結構的定義方法如下:
Public Type POINTAPI
X As Long '點在X坐標(橫坐標)上的坐標值
Y As Long '點在Y坐標(縱坐標)上的坐標值
End Type
又如,API中矩形(Rect)結構的定義如下∶
Public Type RECT
Left As Long '矩形左上角的X坐標
Top As Long '矩形左上角的Y坐標
Right As Long '矩形右下角的X坐標
Bottom As Long '矩形右下角的Y坐標
End Type
這些內容同樣可以從API文本游覽器中拷貝過來。這些結構中的變量名可隨意改動,而不會影響結構本身。也就是說,這些成員變量都是虛擬的。如,POINTAPI結構可改為如下∶
Public Type POINTAPI
MyX As Long '點在X坐標(橫坐標)上的坐標值
MyY As Long '點在Y坐標(縱坐標)上的坐標值
End Type
不過,一般來講,是沒有這種必要的。結構本身是一種數(shù)據(jù)類型,因此,使用時必須聲明具體變量為該結構型,才能在程序中真正使用到該結構。結構的聲明方法和其他數(shù)據(jù)的聲明方法一樣,如,以下語句把變MyPoint聲明為POINTAPI結構類型∶
MyPoint As POINTAPI
引用結構中的成員變量也十分簡單,在結構名后面加上一個".",然后緊接著寫要引用的成員變量即可。這很象VB中的引用一個對象的某個屬性。如,假如我們把上面已經聲明的MyPoint結構中的X變量的值賦給變量Temp&
則代碼如下∶
Temp&=MyPoint.X
但,特別注意的是,你千萬不要認為上例中的MyPoint是一個值。它不是值,而是地址(
指針)。值和地址是完全不同的概念。結構要求按引用傳遞給WINDOWS函數(shù),即所有API
函數(shù)中,結構都是按ByRef傳遞的(在Declare語句 中ByRef是默認型)。對于結構的傳遞,你不要試圖采用ByVal,你將一無所獲。由于結構名實際上就是指向這個結構的指針(這個結構的首地址),所以,你也就傳送特定的結構名就可以了(參見小結,我用紅色字體來突出了這種傳遞方式)。
由于結構傳送的是指針,所以函數(shù)將直接對結構進行讀寫操作。這種特性很適合于把函數(shù)執(zhí)行的結果裝載在結構之中。
小 結 [返回]
以下的程序是為了總結本課中學到的內容而給出的。啟動VB,新建一個項目,添加一個命令按鈕,并把下面的代碼拷貝到代碼段中,運行它。
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI '定義點(Point)結構
X As Long '點在X坐標(橫坐標)上的坐標值
Y As Long '點在Y坐標(縱坐標)上的坐標值
End Type
Sub PrintCursorPos( )
Dim dl AS Long
Dim MyPoint As POINTAPI
dl&= GetCursorPos(MyPoint) '調用函數(shù),獲取屏幕鼠標坐標
Debug.Print "X=" & Str(MyPoint.X) & " and " & "Y=" & Str(MyPoint.Y)
End Sub
Private Sub Command1_Click()
PrintCursorPos
End Sub
輸出結果為(每次運行都可能得到不同的結果,這得由函數(shù)調用時鼠標指針在屏幕中所處的位置而決定)∶
X= 240 and Y= 151
程序中,GetCursorPos函數(shù)用來獲取鼠標指針在屏幕上的位置。
以上例子中,你可以發(fā)現(xiàn),以參數(shù)傳遞的MyPpint結構的內容在函數(shù)調用后發(fā)生了實質性變化。這是由于結構是按ByRef傳遞的原因。
一些API函數(shù)集 [返回]
Windows API
1.控件與消息函數(shù)
AdjustWindowRect 給定一種窗口樣式,計算獲得目標客戶區(qū)矩形所需的窗口大小
AnyPopup 判斷屏幕上是否存在任何彈出式窗口
ArrangeIconicWindows 排列一個父窗口的最小化子窗口
AttachThreadInput 連接線程輸入函數(shù)
BeginDeferWindowPos 啟動構建一系列新窗口位置的過程
BringWindowToTop 將指定的窗口帶至窗口列表頂部
CascadeWindows 以層疊方式排列窗口
ChildWindowFromPoint 返回父窗口中包含了指定點的第一個子窗口的句柄
ClientToScreen 判斷窗口內以客戶區(qū)坐標表示的一個點的屏幕坐標
CloseWindow 最小化指定的窗口
CopyRect 矩形內容復制
DeferWindowPos 該函數(shù)為特定的窗口指定一個新窗口位置
DestroyWindow 清除指定的窗口以及它的所有子窗口
DrawAnimatedRects 描繪一系列動態(tài)矩形
EnableWindow 指定的窗口里允許或禁止所有鼠標及鍵盤輸入
EndDeferWindowPos 同時更新DeferWindowPos調用時指定的所有窗口的位置及狀態(tài)
EnumChildWindows 為指定的父窗口枚舉子窗口
EnumThreadWindows 枚舉與指定任務相關的窗口
EnumWindows 枚舉窗口列表中的所有父窗口
EqualRect 判斷兩個矩形結構是否相同
FindWindow 尋找窗口列表中第一個符合指定條件的頂級窗口
FindWindowEx 在窗口列表中尋找與指定條件相符的第一個子窗口
FlashWindow 閃爍顯示指定窗口
GetActiveWindow 獲得活動窗口的句柄
GetCapture 獲得一個窗口的句柄,這個窗口位于當前輸入線程,且擁有鼠標捕獲(鼠標活動由它接收)
GetClassInfo 取得WNDCLASS結構(或WNDCLASSEX結構)的一個副本,結構中包含了與指定類有關的信息
GetClassLong 取得窗口類的一個Long變量條目
GetClassName 為指定的窗口取得類名
GetClassWord 為窗口類取得一個整數(shù)變量
GetClientRect 返回指定窗口客戶區(qū)矩形的大小
GetDesktopWindow 獲得代表整個屏幕的一個窗口(桌面窗口)句柄
GetFocus 獲得擁有輸入焦點的窗口的句柄
GetForegroundWindow 獲得前臺窗口的句柄
GetLastActivePopup 獲得在一個給定父窗口中最近激活過的彈出式窗口的句柄
GetLastError 針對之前調用的api函數(shù),用這個函數(shù)取得擴展錯誤信息
GetParent 判斷指定窗口的父窗口
GetTopWindow 搜索內部窗口列表,尋找隸屬于指定窗口的頭一個窗口的句柄
GetUpdateRect 獲得一個矩形,它描敘了指定窗口中需要更新的那一部分
GetWindow 獲得一個窗口的句柄,該窗口與某源窗口有特定的關系
GetWindowContextHelpId 取得與窗口關聯(lián)在一起的幫助場景ID
GetWindowLong 從指定窗口的結構中取得信息
GetWindowPlacement 獲得指定窗口的狀態(tài)及位置信息
GetWindowRect 獲得整個窗口的范圍矩形,窗口的邊框、標題欄、滾動條及菜單等都在這個矩形內
GetWindowText 取得一個窗體的標題(caption)文字,或者一個控件的內容
GetWindowTextLength 調查窗口標題文字或控件內容的長短
GetWindowWord 獲得指定窗口結構的信息
InflateRect 增大或減小一個矩形的大小
IntersectRect 這個函數(shù)在lpDestRect里載入一個矩形,它是lpSrc1Rect與lpSrc2Rect兩個矩形的交集
InvalidateRect 屏蔽一個窗口客戶區(qū)的全部或部分區(qū)域
IsChild 判斷一個窗口是否為另一窗口的子或隸屬窗口
IsIconic 判斷窗口是否已最小化
IsRectEmpty 判斷一個矩形是否為空
IsWindow 判斷一個窗口句柄是否有效
IsWindowEnabled 判斷窗口是否處于活動狀態(tài)
IsWindowUnicode 判斷一個窗口是否為Unicode窗口。這意味著窗口為所有基于文本的消息都接收Unicode文字
IsWindowVisible 判斷窗口是否可見
IsZoomed 判斷窗口是否最大化
LockWindowUpdate 鎖定指定窗口,禁止它更新
MapWindowPoints 將一個窗口客戶區(qū)坐標的點轉換到另一窗口的客戶區(qū)坐標系統(tǒng)
MoveWindow 改變指定窗口的位置和大小
OffsetRect 通過應用一個指定的偏移,從而讓矩形移動起來
OpenIcon 恢復一個最小化的程序,并將其激活
PtInRect 判斷指定的點是否位于矩形內部
RedrawWindow 重畫全部或部分窗口
ReleaseCapture 為當前的應用程序釋放鼠標捕獲
ScreenToClient 判斷屏幕上一個指定點的客戶區(qū)坐標
ScrollWindow 滾動窗口客戶區(qū)的全部或一部分
ScrollWindowEx 根據(jù)附加的選項,滾動窗口客戶區(qū)的全部或部分
SetActiveWindow 激活指定的窗口
SetCapture 將鼠標捕獲設置到指定的窗口
SetClassLong 為窗口類設置一個Long變量條目
SetClassWord 為窗口類設置一個條目
SetFocusAPI 將輸入焦點設到指定的窗口。如有必要,會激活窗口
SetForegroundWindow 將窗口設為系統(tǒng)的前臺窗口
SetParent 指定一個窗口的新父
SetRect 設置指定矩形的內容
SetRectEmpty 將矩形設為一個空矩形
SetWindowContextHelpId 為指定的窗口設置幫助場景(上下文)ID
SetWindowLong 在窗口結構中為指定的窗口設置信息
SetWindowPlacement 設置窗口狀態(tài)和位置信息
SetWindowPos 為窗口指定一個新位置和狀態(tài)
SetWindowText 設置窗口的標題文字或控件的內容
SetWindowWord 在窗口結構中為指定的窗口設置信息
ShowOwnedPopups 顯示或隱藏由指定窗口所有的全部彈出式窗口
ShowWindow 控制窗口的可見性
ShowWindowAsync 與ShowWindow相似
SubtractRect 裝載矩形lprcDst,它是在矩形lprcSrc1中減去lprcSrc2得到的結果
TileWindows 以平鋪順序排列窗口
UnionRect 裝載一個lpDestRect目標矩形,它是lpSrc1Rect和lpSrc2Rect聯(lián)合起來的結果
UpdateWindow 強制立即更新窗口
ValidateRect 校驗窗口的全部或部分客戶區(qū)
WindowFromPoint 返回包含了指定點的窗口的句柄。忽略屏蔽、隱藏以及透明窗口
2.硬件與系統(tǒng)函數(shù)
ActivateKeyboardLayout 激活一個新的鍵盤布局。鍵盤布局定義了按鍵在一種物理性鍵盤上的位置與含義
Beep 用于生成簡單的聲音
CharToOem 將一個字串從ANSI字符集轉換到OEM字符集
ClipCursor 將指針限制到指定區(qū)域
ConvertDefaultLocale 將一個特殊的地方標識符轉換成真實的地方ID
CreateCaret 根據(jù)指定的信息創(chuàng)建一個插入符(光標),并將它選定為指定窗口的默認插入符
DestroyCaret 清除(破壞)一個插入符
EnumCalendarInfo 枚舉在指定“地方”環(huán)境中可用的日歷信息
EnumDateFormats 列舉指定的“當?shù)亍痹O置中可用的長、短日期格式
EnumSystemCodePages 枚舉系統(tǒng)中已安裝或支持的代碼頁
EnumSystemLocales 枚舉系統(tǒng)已經安裝或提供支持的“地方”設置
EnumTimeFormats 枚舉一個指定的地方適用的時間格式
ExitWindowsEx 退出windows,并用特定的選項重新啟動
ExpandEnvironmentStrings 擴充環(huán)境字串
FreeEnvironmentStrings 翻譯指定的環(huán)境字串塊
GetACP 判斷目前正在生效的ANSI代碼頁
GetAsyncKeyState 判斷函數(shù)調用時指定虛擬鍵的狀態(tài)
GetCaretBlinkTime 判斷插入符光標的閃爍頻率
GetCaretPos 判斷插入符的當前位置
GetClipCursor 取得一個矩形,用于描述目前為鼠標指針規(guī)定的剪切區(qū)域
GetCommandLine 獲得指向當前命令行緩沖區(qū)的一個指針
GetComputerName 取得這臺計算機的名稱
GetCPInfo 取得與指定代碼頁有關的信息
GetCurrencyFormat 針對指定的“地方”設置,根據(jù)貨幣格式格式化一個數(shù)字
GetCursor 獲取目前選擇的鼠標指針的句柄
GetCursorPos 獲取鼠標指針的當前位置
GetDateFormat 針對指定的“當?shù)亍备袷?,對一個系統(tǒng)日期進行格式化
GetDoubleClickTime 判斷連續(xù)兩次鼠標單擊之間會被處理成雙擊事件的間隔時間
GetEnvironmentStrings 為包含了當前環(huán)境字串設置的一個內存塊分配和返回一個句柄
GetEnvironmentVariable 取得一個環(huán)境變量的值
GetInputState 判斷是否存在任何待決(等待處理)的鼠標或鍵盤事件
GetKBCodePage 由GetOEMCP取代,兩者功能完全相同
GetKeyboardLayout 取得一個句柄,描述指定應用程序的鍵盤布局
GetKeyboardLayoutList 獲得系統(tǒng)適用的所有鍵盤布局的一個列表
GetKeyboardLayoutName 取得當前活動鍵盤布局的名稱
GetKeyboardState 取得鍵盤上每個虛擬鍵當前的狀態(tài)
GetKeyboardType 了解與正在使用的鍵盤有關的信息
GetKeyNameText 在給出掃描碼的前提下,判斷鍵名
GetKeyState 針對已處理過的按鍵,在最近一次輸入信息時,判斷指定虛擬鍵的狀態(tài)
GetLastError 針對之前調用的api函數(shù),用這個函數(shù)取得擴展錯誤信息
GetLocaleInfo 取得與指定“地方”有關的信息
GetLocalTime 取得本地日期和時間
GetNumberFormat 針對指定的“地方”,按特定的格式格式化一個數(shù)字
GetOEMCP 判斷在OEM和ANSI字符集間轉換的windows代碼頁
GetQueueStatus 判斷應用程序消息隊列中待決(等待處理)的消息類型
GetSysColor 判斷指定windows顯示對象的顏色
GetSystemDefaultLangID 取得系統(tǒng)的默認語言ID
GetSystemDefaultLCID 取得當前的默認系統(tǒng)“地方”
GetSystemInfo 取得與底層硬件平臺有關的信息
GetSystemMetrics 返回與windows環(huán)境有關的信息
GetSystemPowerStatus 獲得與當前系統(tǒng)電源狀態(tài)有關的信息
GetSystemTime 取得當前系統(tǒng)時間,這個時間采用的是“協(xié)同世界時間”(即UTC,也叫做GMT)格式
GetSystemTimeAdjustment 使內部系統(tǒng)時鐘與一個外部的時鐘信號源同步
GetThreadLocale 取得當前線程的地方ID
GetTickCount 用于獲取自windows啟動以來經歷的時間長度(毫秒)
GetTimeFormat 針對當前指定的“地方”,按特定的格式格式化一個系統(tǒng)時間
GetTimeZoneInformation 取得與系統(tǒng)時區(qū)設置有關的信息
GetUserDefaultLangID 為當前用戶取得默認語言ID
GetUserDefaultLCID 取得當前用戶的默認“地方”設置
GetUserName 取得當前用戶的名字
GetVersion 判斷當前運行的Windows和DOS版本
GetVersionEx 取得與平臺和操作系統(tǒng)有關的版本信息
HideCaret 在指定的窗口隱藏插入符(光標)
IsValidCodePage 判斷一個代碼頁是否有效
IsValidLocale 判斷地方標識符是否有效
keybd_event 這個函數(shù)模擬了鍵盤行動
LoadKeyboardLayout 載入一個鍵盤布局
MapVirtualKey 根據(jù)指定的映射類型,執(zhí)行不同的掃描碼和字符轉換
MapVirtualKeyEx 根據(jù)指定的映射類型,執(zhí)行不同的掃描碼和字符轉換
MessageBeep 播放一個系統(tǒng)聲音。系統(tǒng)聲音的分配方案是在控制面板里決定的
mouse_event 模擬一次鼠標事件
OemKeyScan 判斷OEM字符集中的一個ASCII字符的掃描碼和Shift鍵狀態(tài)
OemToChar 將OEM字符集的一個字串轉換到ANSI字符集
SetCaretBlinkTime 指定插入符(光標)的閃爍頻率
SetCaretPos 指定插入符的位置
SetComputerName 設置新的計算機名
SetCursor 將指定的鼠標指針設為當前指針
SetCursorPos 設置指針的位置
SetDoubleClickTime 設置連續(xù)兩次鼠標單擊之間能使系統(tǒng)認為是雙擊事件的間隔時間
SetEnvironmentVariable 將一個環(huán)境變量設為指定的值
SetKeyboardState 設置每個虛擬鍵當前在鍵盤上的狀態(tài)
SetLocaleInfo 改變用戶“地方”設置信息
SetLocalTime 設置當前地方時間
SetSysColors 設置指定窗口顯示對象的顏色
SetSystemCursor 改變任何一個標準系統(tǒng)指針
SetSystemTime 設置當前系統(tǒng)時間
SetSystemTimeAdjustment 定時添加一個校準值使內部系統(tǒng)時鐘與一個外部的時鐘信號源同步
SetThreadLocale 為當前線程設置地方
SetTimeZoneInformation 設置系統(tǒng)時區(qū)信息
ShowCaret 在指定的窗口里顯示插入符(光標)
ShowCursor 控制鼠標指針的可視性
SwapMouseButton 決定是否互換鼠標左右鍵的功能
SystemParametersInfo 獲取和設置數(shù)量眾多的windows系統(tǒng)參數(shù)
SystemTimeToTzSpecificLocalTime 將系統(tǒng)時間轉換成地方時間
ToAscii 根據(jù)當前的掃描碼和鍵盤信息,將一個虛擬鍵轉換成ASCII字符
ToUnicode 根據(jù)當前的掃描碼和鍵盤信息,將一個虛擬鍵轉換成Unicode字符
UnloadKeyboardLayout 卸載指定的鍵盤布局
VkKeyScan 針對Windows字符集中一個ASCII字符,判斷虛擬鍵碼和Shift鍵的狀態(tài)
完
3.菜單函數(shù)
AppendMenu 在指定的菜單里添加一個菜單項
CheckMenuItem 復選或撤消復選指定的菜單條目
CheckMenuRadioItem 指定一個菜單條目被復選成“單選”項目
CreateMenu 創(chuàng)建新菜單
CreatePopupMenu 創(chuàng)建一個空的彈出式菜單
DeleteMenu 刪除指定的菜單條目
DestroyMenu 刪除指定的菜單
DrawMenuBar 為指定的窗口重畫菜單
EnableMenuItem 允許或禁止指定的菜單條目
GetMenu 取得窗口中一個菜單的句柄
GetMenuCheckMarkDimensions 返回一個菜單復選符的大小
GetMenuContextHelpId 取得一個菜單的幫助場景ID
GetMenuDefaultItem 判斷菜單中的哪個條目是默認條目
GetMenuItemCount 返回菜單中條目(菜單項)的數(shù)量
GetMenuItemID 返回位于菜單中指定位置處的條目的菜單ID
GetMenuItemInfo 取得(接收)與一個菜單條目有關的特定信息
GetMenuItemRect 在一個矩形中裝載指定菜單條目的屏幕坐標信息
GetMenuState 取得與指定菜單條目狀態(tài)有關的信息
GetMenuString 取得指定菜單條目的字串
GetSubMenu 取得一個彈出式菜單的句柄,它位于菜單中指定的位置
GetSystemMenu 取得指定窗口的系統(tǒng)菜單的句柄
HiliteMenuItem 控制頂級菜單條目的加亮顯示狀態(tài)
InsertMenu 在菜單的指定位置處插入一個菜單條目,并根據(jù)需要將其他條目向下移動
InsertMenuItem 插入一個新菜單條目
IsMenu 判斷指定的句柄是否為一個菜單的句柄
LoadMenu 從指定的模塊或應用程序實例中載入一個菜單
LoadMenuIndirect 載入一個菜單
MenuItemFromPoint 判斷哪個菜單條目包含了屏幕上一個指定的點
ModifyMenu 改變菜單條目
RemoveMenu 刪除指定的菜單條目
SetMenu 設置窗口菜單
SetMenuContextHelpId 設置一個菜單的幫助場景ID
SetMenuDefaultItem 將一個菜單條目設為默認條目
SetMenuItemBitmaps 設置一幅特定位圖,令其在指定的菜單條目中使用,代替標準的復選符號(√)
SetMenuItemInfo 為一個菜單條目設置指定的信息
TrackPopupMenu 在屏幕的任意地方顯示一個彈出式菜單
TrackPopupMenuEx 與TrackPopupMenu相似,只是它提供了額外的功能
完
以下是幾個關于菜單函數(shù)的類型定義
MENUITEMINFO 這個結構包含了菜單條目的信息
TPMPARAMS 這個結構用于TrackPopupMenuEx函數(shù)以支持額外的功能
4.繪圖函數(shù)
AbortPath 拋棄選入指定設備場景中的所有路徑。也取消目前正在進行的任何路徑的創(chuàng)建工作
AngleArc 用一個連接弧畫一條線
Arc 畫一個圓弧
BeginPath 啟動一個路徑分支
CancelDC 取消另一個線程里的長時間繪圖操作
Chord 畫一個弦
CloseEnhMetaFile 關閉指定的增強型圖元文件設備場景,并將新建的圖元文件返回一個句柄
CloseFigure 描繪到一個路徑時,關閉當前打開的圖形
CloseMetaFile 關閉指定的圖元文件設備場景,并向新建的圖元文件返回一個句柄
CopyEnhMetaFile 制作指定增強型圖元文件的一個副本(拷貝)
CopyMetaFile 制作指定(標準)圖元文件的一個副本
CreateBrushIndirect 在一個LOGBRUSH數(shù)據(jù)結構的基礎上創(chuàng)建一個刷子
CreateDIBPatternBrush 用一幅與設備無關的位圖創(chuàng)建一個刷子,以便指定刷子樣式(圖案)
CreateEnhMetaFile 創(chuàng)建一個增強型的圖元文件設備場景
CreateHatchBrush 創(chuàng)建帶有陰影圖案的一個刷子
CreateMetaFile 創(chuàng)建一個圖元文件設備場景
CreatePatternBrush 用指定了刷子圖案的一幅位圖創(chuàng)建一個刷子
CreatePen 用指定的樣式、寬度和顏色創(chuàng)建一個畫筆
CreatePenIndirect 根據(jù)指定的LOGPEN結構創(chuàng)建一個畫筆
CreateSolidBrush 用純色創(chuàng)建一個刷子
DeleteEnhMetaFile 刪除指定的增強型圖元文件
DeleteMetaFile 刪除指定的圖元文件
DeleteObject 刪除GDI對象,對象使用的所有系統(tǒng)資源都會被釋放
DrawEdge 用指定的樣式描繪一個矩形的邊框
DrawEscape 換碼(Escape)函數(shù)將數(shù)據(jù)直接發(fā)至顯示設備驅動程序
DrawFocusRect 畫一個焦點矩形
DrawFrameControl 描繪一個標準控件
DrawState 為一幅圖象或繪圖操作應用各式各樣的效果
Ellipse 描繪一個橢圓,由指定的矩形圍繞
EndPath 停止定義一個路徑
EnumEnhMetaFile 針對一個增強型圖元文件,列舉其中單獨的圖元文件記錄
EnumMetaFile 為一個標準的windows圖元文件枚舉單獨的圖元文件記錄
EnumObjects 枚舉可隨同指定設備場景使用的畫筆和刷子
ExtCreatePen 創(chuàng)建一個擴展畫筆(裝飾或幾何)
ExtFloodFill 在指定的設備場景里,用當前選擇的刷子填充一個區(qū)域
FillPath 關閉路徑中任何打開的圖形,并用當前刷子填充
FillRect 用指定的刷子填充一個矩形
FlattenPath 將一個路徑中的所有曲線都轉換成線段
FloodFill 用當前選定的刷子在指定的設備場景中填充一個區(qū)域
FrameRect 用指定的刷子圍繞一個矩形畫一個邊框
GdiComment 為指定的增強型圖元文件設備場景添加一條注釋信息
GdiFlush 執(zhí)行任何未決的繪圖操作
GdiGetBatchLimit 判斷有多少個GDI繪圖命令位于隊列中
GdiSetBatchLimit 指定有多少個GDI繪圖命令能夠進入隊列
GetArcDirection 畫圓弧的時候,判斷當前采用的繪圖方向
GetBkColor 取得指定設備場景當前的背景顏色
GetBkMode 針對指定的設備場景,取得當前的背景填充模式
GetBrushOrgEx 判斷指定設備場景中當前選定刷子起點
GetCurrentObject 獲得指定類型的當前選定對象
GetCurrentPositionEx 在指定的設備場景中取得當前的畫筆位置
GetEnhMetaFile 取得磁盤文件中包含的一個增強型圖元文件的圖元文件句柄
GetEnhMetaFileBits 將指定的增強型圖元文件復制到一個內存緩沖區(qū)里
GetEnhMetaFileDescription 返回對一個增強型圖元文件的說明
GetEnhMetaFileHeader 取得增強型圖元文件的圖元文件頭
GetEnhMetaFilePaletteEntries 取得增強型圖元文件的全部或部分調色板
GetMetaFile 取得包含在一個磁盤文件中的圖元文件的圖元文件句柄
GetMetaFileBitsEx 將指定的圖元文件復制到一個內存緩沖區(qū)
GetMiterLimit 取得設備場景的斜率限制(Miter)設置
GetNearestColor 根據(jù)設備的顯示能力,取得與指定顏色最接近的一種純色
GetObjectAPI 取得對指定對象進行說明的一個結構
GetObjectType 判斷由指定句柄引用的GDI對象的類型
GetPath 取得對當前路徑進行定義的一系列數(shù)據(jù)
GetPixel 在指定的設備場景中取得一個像素的RGB值
GetPolyFillMode 針對指定的設備場景,獲得多邊形填充模式
GetROP2 針對指定的設備場景,取得當前的繪圖模式
GetStockObject 取得一個固有對象(Stock)
GetSysColorBrush 為任何一種標準系統(tǒng)顏色取得一個刷子
GetWinMetaFileBits 通過在一個緩沖區(qū)中填充用于標準圖元文件的數(shù)據(jù),將一個增強型圖元文件轉換成標準windows圖元文件
InvertRect 通過反轉每個像素的值,從而反轉一個設備場景中指定的矩形
LineDDA 枚舉指定線段中的所有點
LineTo 用當前畫筆畫一條線,從當前位置連到一個指定的點
相關文章
淺談如何使用vb.net從數(shù)據(jù)庫中提取數(shù)據(jù)
這篇文章主要介紹了淺談如何使用vb.net從數(shù)據(jù)庫中提取數(shù)據(jù),使用VB提取數(shù)據(jù),是先查找,做成數(shù)組,再顯示到數(shù)據(jù)里,如果感興趣可以了解一下2020-07-07VB6實現(xiàn)連接Access數(shù)據(jù)庫的ADODB代碼實現(xiàn)方法
這篇文章主要介紹了VB6實現(xiàn)連接Access數(shù)據(jù)庫的ADODB代碼實現(xiàn)方法,對于初學者掌握VB鏈接access數(shù)據(jù)庫有著很好的借鑒價值,需要的朋友可以參考下2014-07-07在VB中遍歷文件并用正則表達式完成復制及vb實現(xiàn)重命名、拷貝文件夾的方法
這篇文章主要介紹了在VB中遍歷文件并用正則表達式完成復制及vb實現(xiàn)重命名、拷貝文件夾的方法,需要的朋友可以參考下2018-12-12