亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
查看: 2502 | 回復(fù): 0
打印 上一主題 下一主題

如何才能提升你對(duì)API的學(xué)習(xí)興趣? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-07-30 15:43 |只看該作者 |倒序?yàn)g覽
API,我常把它看做成過程函數(shù),不過每人都有每人的見解和理解方式,自己的理解方式只要可以幫助自己更好的學(xué)習(xí)和掌握API,也沒必要一定要學(xué)習(xí)他人的。

  1,自己做MsgBox

  了解API參數(shù)的使用方法是很重要的,這里我們不用VB的MsgBox,直接使用API彈出MsgBox消息框。首先,打開API瀏覽器,選擇MessageBox,大家可以用這個(gè)API和VB內(nèi)置的MsgBox比較一下,其實(shí)MsgBox也就是MessageBox的縮寫,只不過一個(gè)是API,一個(gè)是VB內(nèi)置的,但兩者都是通過API進(jìn)行工作的。好了,選擇私有聲明方式,粘貼到VB代碼編輯窗口中,然后新建一個(gè)CommandButton,寫入以下代碼:

Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA"
(ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String,
ByVal wType As Long) As Long
Private Sub Command1_Click()
     MessageBox Me.hwnd, "這里是內(nèi)容", "標(biāo)題", 0
End Sub

  先讓我們來分析一下,首先看第一個(gè)參數(shù)Byval hWnd As Long,很顯然這是一個(gè)長(zhǎng)整形變量,所以我們這里需要傳遞的是數(shù)字,你可能會(huì)發(fā)現(xiàn)我們傳遞的并不是數(shù)字啊,而是 Me.hwnd??很奇怪是嗎?如果你真的有此疑問說明你是真心想要學(xué)習(xí)好API的,現(xiàn)在就讓我們來看看Me.hwnd到底是什么東西?以下摘自VB幫助文檔:
  hWnd 屬性:返回窗體或控件的句柄。
  句 柄:是由操作環(huán)境定義的一個(gè)唯一的整數(shù)值,它被程序用來標(biāo)識(shí)或者切換到對(duì)象,如窗體或控件等。

  現(xiàn)在估計(jì)你差不多就已經(jīng)明白了,我們調(diào)用的hwnd其實(shí)是一個(gè)句柄整數(shù)值,你可以用 Msgbox Me.hwnd 看一下就知道了。至于Me這是一個(gè)關(guān)鍵字,代表當(dāng)前Form窗體對(duì)象。如:Me.Caption="標(biāo)題"、Me.BackColor=vbRed等。

  接上面的,首先我們傳入了Me.hwnd,表示是當(dāng)前窗口調(diào)用MessageBox,這里告訴大家一個(gè)技巧,也就是以后凡是看到Byval hwnd As Long,一般都是需要傳入句柄的,至于傳入哪個(gè)對(duì)象句柄,那就要看你是怎么實(shí)現(xiàn)的了。
  ByVal lpText As String,這個(gè)是字符串變量,標(biāo)識(shí)著叫我們需要傳入字符串進(jìn)去,可以看里面的變量字符lpText,屬于文本的意思,也就是說是用來顯示MsgBox中的消息文本的。
  ByVal lpCaption As String,也是字符串變量,還是傳入字符串進(jìn)去。在看里面的變量字符lpCaption,其實(shí)就是顯示MsgBox標(biāo)題的。
  ByVal wType As Long,這是一個(gè)整形變量,需要傳遞整形數(shù)字,還是看里面的變量字符wType,標(biāo)識(shí)著顯示MsgBox類型,這里可以像VB的MsgBox一樣使用,如這里可以傳入:vbYesNo,vbOkCancel等,如果忽略那就傳入0即可。

  好了,按F5啟動(dòng)程序,點(diǎn)擊Command1,接著就會(huì)彈出一個(gè)消息框,這里我們制作以及分析MsgBox已經(jīng)完成了。希望你能在這段學(xué)習(xí)到一些知識(shí)。

  2,來點(diǎn)實(shí)用的吧

  就拿隱藏Windows任務(wù)管理器來說吧,這里只能隱藏任務(wù)管理器中的窗口,不能隱藏進(jìn)程。(問:有沒有隱藏進(jìn)程的?答:你想干什么?),當(dāng)程序運(yùn)行后你無(wú)法從任務(wù)管理器的窗口中關(guān)閉程序,只能從進(jìn)程中進(jìn)行終止。好了,還是老規(guī)矩,打開API瀏覽器,輸入GetWindow和ShowWindow兩個(gè)API,聲明范圍還是私有的,復(fù)制粘貼到Form代碼窗口中,嗯,好了?別急,還是API瀏覽器,選擇Combox中的常數(shù),輸入GW_OWNER和SW_HIDE這兩個(gè)API常數(shù),然后粘貼到代碼窗口中,問我這兩個(gè)是干什么的?那就接著往下看吧。寫入以下代碼:

Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long,
ByVal wCmd As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long,
ByVal nCmdShow As Long) As Long
Private Const GW_OWNER = 4
Private Const SW_HIDE = 0
Private Sub Form_Load()
     Dim lphWnd As Long
     lphWnd = GetWindow(Me.hwnd, GW_OWNER)
     ShowWindow lphWnd, SW_HIDE
End Sub

  又到了分析的時(shí)候了,這對(duì)剛?cè)腴T的新手可謂是最激動(dòng)的時(shí)候了。好了,還是老子,看看兩個(gè)API的表面意思和傳遞值變量。

  先看GetWindow,表面意思:獲取窗口。傳遞值變量:hWnd整形句柄,wCmd整形命令值。
  再看ShowWindow,表面意思:顯示窗口。傳遞值變量:hWnd整形句柄,nCmdShow整形命令值。

  然后是使用代碼,先看lphWnd = GetWindow(Me.hwnd, GW_OWNER)這句,這句意思是獲取當(dāng)前窗口的所有者窗口句柄,可以看到GetWindow是Function過程函數(shù),執(zhí)行以后會(huì)返回相應(yīng)的窗口句柄值,這個(gè)值為L(zhǎng)ong整形(同句柄)。接著調(diào)用ShowWindow lphWnd, SW_HIDE,這句意思是顯示lphwnd這個(gè)句柄的窗口,關(guān)鍵一句是最后的SW_HIDE,這是API函數(shù)的常量。通過設(shè)置常量能讓系統(tǒng)知道API到底應(yīng)該怎么執(zhí)行顯示窗口,是顯示?還是隱藏?Hide當(dāng)然是隱藏的意思。好了,編譯成Exe,運(yùn)行后打開任務(wù)管理器,查看程序窗口,還有嗎?

  我又要說一下了,有些人可能不懂為什么要用GW_OWNER這些常量,這些到底有什么用?還有就是我怎么知道哪些API對(duì)應(yīng)哪些的常量?其實(shí)這些常量你只要稍微注意一下就知道它們是怎么回事了,如在GetWindow中我使用GW_OWNER,在ShowWindow中我使用SW_HIDE這些常量都有一個(gè)共同的特點(diǎn),就是他們都是以API的單詞第一個(gè)字母為標(biāo)準(zhǔn)。如GetWindow相對(duì)應(yīng)的常量就是Get(G)Window(W)=GW,ShowWindow相對(duì)應(yīng)的常就是Show(S)Window(W)=SW,這些常量可以自己在VB的API瀏覽器中找找看。

三、API的類型結(jié)構(gòu)。


             API的類型結(jié)構(gòu)與VB中差不多,一般聲明時(shí)使用Type定義類型。如果你不懂的話麻煩你先打開你的VB入門教程書看看。好了,文字理論咋不多說,用實(shí)例證實(shí)理論(偶喜歡這句話)。


         1,在Form窗體上用API畫文字,最初了解類型結(jié)構(gòu)填充


             ;Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

         ;Private Const DT_CENTER = &H1

         ;Private Type RECT
                     Left As Long
                     Top As Long
                     Right As Long
                     Bottom As Long
         End Type


         Private Sub Form_Load()
                 Dim lpRect As RECT

                     Me.AutoRedraw = True
                 Me.ScaleMode = 3
                             '填充結(jié)構(gòu)
                 With lpRect
                     .Left = 0
                     .Top = 0
                     .Right = Me.ScaleWidth
                     .Bottom = Me.ScaleHeight
             End With

                     DrawText Me.hdc, "這是文字效果", -1, lpRect, DT_CENTER
         End Sub


             好了,咱們開始分析,首先看Form_Load里面的代碼。


             Dim lpRect As RECT。這一句是聲明一個(gè)RECT自定義類型,這個(gè)類型可在VB瀏覽器的類型中找到。


             Me.AutoRedraw = True。這一句其實(shí)就是設(shè)置當(dāng)前窗體的AutoRedraw屬性,設(shè)為True,表示持久輸出圖像。不懂查幫助。


             Me.ScaleMode = 3。設(shè)置當(dāng)前窗體的像素模式。至于為啥要設(shè)置為3,下面將會(huì)講到。


             With lpRect...End With。從With 到 End With為填充咱們聲明的lpRect類型結(jié)構(gòu)。具體看里面的。


             .Left=0。這里相當(dāng)于x坐標(biāo)的初始值。


             .Top=0。這里相當(dāng)于y坐標(biāo)的初始值。


             .Right = Me.ScaleWidth。Right表示從Left開始的寬度。這里賦值為Me.ScaleWidth表示當(dāng)前窗體像素的寬度。


             .Bottom = Me.ScaleHeight。同上。Bottom表示從Top開始的高度。Me.ScaleHeight表示當(dāng)前窗體像素的高度。


             關(guān)鍵的就是下面一句,是它幫助我們?cè)诖绑w中畫出文字的。這里說一下為什么需要把當(dāng)前窗體的坐標(biāo)度量單位(ScaleMode)改成3(Pixel像素),因?yàn)閃indows不管畫什么都是以像素為單位,所以我們?yōu)榱舜_定咱們所畫的文本顯示在正常位置,就必須使用像素為單位!明白了么??(問:還是不明白?答:默默無(wú)語(yǔ)兩眼淚啊~~)


             DrawText Me.hdc, "這是文字效果", -1, lpRect, DT_CENTER


             現(xiàn)在分析這條API?纯蠢锩嫘枰獋魅氲膮(shù):ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long


             ByVal hdc As Long。hdc為L(zhǎng)ong整形,所以應(yīng)該傳入數(shù)值,不過給大家一個(gè)技巧,以后凡是看到hdc這個(gè)變量字符,表示需要傳入的為一個(gè)hdc句柄,注意可不是hwnd句柄哦!這個(gè)句柄窗體和Picture控件都有,大家注意看就是了。


             ByVal lpStr As String。傳入字符串。這里就是咱們需要畫到窗體上的文本。


             ByVal nCount As Long。傳入數(shù)值?纯蠢锩娴穆暶髯址鹡Count,可以看出來這與數(shù)目有關(guān),與什么數(shù)目呢?當(dāng)然是文本羅。也就是說要顯示的字符個(gè)數(shù),一般如果需要全部顯示出來可設(shè)為-1即可,表示顯示所有字符。


             lpRect As RECT。一個(gè)Rect類型,這里需要使用Rect類型,上面我們已經(jīng)在API瀏覽器找到了這個(gè)類型并聲明了,所以只需要傳入相應(yīng)的類型聲明就可以了。不過這次與我上一次講的有所不同,上次是通過API類型結(jié)構(gòu)獲取相關(guān)的信息,而這次需要你把API類型結(jié)構(gòu)填充好以后再傳入進(jìn)去。希望大家在這里注意下?赡苡腥艘獑柫耍菫槭裁催@次就要這么做?我的回答是:因?yàn)锳PI并不是萬(wàn)能的和靈活的,有的時(shí)候需要我們?nèi)藶榈脑O(shè)置一些參數(shù)來完成自己所需要這個(gè)API的功能,大家可以通過上面的結(jié)構(gòu)填充就可知道,我們所要畫文本的整個(gè)范圍就是整個(gè)Form窗體的范圍!


             ByVal wFormat As Long。傳入數(shù)值,不過可以看看nFormat聲明字符,可以想像這里可能需要傳入這個(gè)API的使用格式,就如我們前面所講的那樣,F(xiàn)在打開API瀏覽器,在常數(shù)中找找,輸入這個(gè)API的開頭,Draw(D)Text(T)=DT_,可以看到有很多吧。具體這些都是什么意思可以查查相關(guān)的API資料。這里我們只傳入了一個(gè)DT_CENTER常數(shù),意思是居中顯示。默認(rèn)可以為0,因?yàn)檫@里為文字顯示格式,所以你什么格式也不想要的話可設(shè)為0以后文字顯示在左上角。


             OK。F5運(yùn)行之。。。窗體中間正常顯示“這就是文字效果”的幾個(gè)文字。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP