簡單說明VB.NET自定義類型在API中使用
隨著時(shí)代的發(fā)展,VB.NET技術(shù)也隨著發(fā)展,我在前面已經(jīng)提到過VB.NET自定義類型,這次我用一個(gè)簡單的API來說明一個(gè)VB.NET自定義類型在API中的使用。VB.NET自定義類型規(guī)定了變量傳遞給函數(shù)或子程序時(shí)必須按引用來傳遞(關(guān)于按引用傳遞與按值傳遞,將在以后的文章中做詳細(xì)介紹),因此下面這個(gè)API的聲明,你會(huì)發(fā)現(xiàn)和前面所介紹的幾個(gè)有少許不同。
- Public Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long
相比上一話中的一個(gè)API:
- Public Declare Function GetSystemDirectory Lib "kernel32" Alias
"GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
可發(fā)現(xiàn)參數(shù)前面少了個(gè)ByVal。如果不加ByVal,或者把ByVal換成ByRef,就是按引用傳遞。POINTAPI不是VB的標(biāo)準(zhǔn)數(shù)據(jù)類型,它是一個(gè)自定義類型。從API瀏覽器中我們得到它的定義原形是這樣的:
- Public Type POINTAPI
- x As Long
- y As Long
- End Type
#T#這里應(yīng)該引起注意的是,你應(yīng)該把POINTAPI的定義寫在使用它的函數(shù)聲明之前,否則VB會(huì)認(rèn)為你的類型未定義。你也不可以把 x As Long 和 y As Long 的位置對(duì)調(diào),如果對(duì)調(diào)了,在這個(gè)API中最多只會(huì)使原本 x 的值變成 y 的值,y 的值變成 x 的值,但在更復(fù)雜的自定義類型中,結(jié)果就不可預(yù)知了。這個(gè)API的作用是得到鼠標(biāo)指針在屏幕中的坐標(biāo)(以像素為單位)。你可以在自己的程序中試驗(yàn)它,比如:
- Dim tCursor As POINTAPI
- GetCursorPos tCursor
- Debug.Print tCursor.x, tCursor.y
將從調(diào)試窗口打印鼠標(biāo)指針的當(dāng)前坐標(biāo)
VB 中的坐標(biāo)系統(tǒng)比較豐富,有Twip、Point、Pixel、 Character、Inch、Millimeter、Centimeter和User。很復(fù)雜吧?在這里我要說的是Twip和Pixel,至于剩下的,由于和本文所說的應(yīng)用無多大關(guān)系,請(qǐng)參考MSDN或相關(guān)書籍。