資源描述:
《vfp調(diào)用windows api函數(shù)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、VFP調(diào)用WindowsAPI函數(shù)正式開始:我想你可能經(jīng)常看過如下這種語句,我不得不在這里重復(fù)地說一遍DECLAREINTEGERSetWindowTextINuser32;INTEGERhWnd,;STRINGlpStringHwnd=thisform.hwndcustomtext=space(250)lnlen=len(customtext)SetWindowText(Hwnd,customtext,lnlen)第一個語句就是一般的api定義,意思就是注冊一個user32.dll動態(tài)庫中的函數(shù)SetWindowText,接受參數(shù) integer類型hwnd,string類型h的sWind
2、owText參數(shù),,返回值為intger,這是參數(shù)按值傳遞的一部分,第三個語句就是調(diào)用注冊的api函數(shù)了,看起來和我們用普通的foxpro函數(shù)并無區(qū)別,只是多了一步注冊的步驟.我們再看看另一種定義,按引用傳遞的的方式,看到什么不同了嗎?第一個語句就是一般的api定義,意思就是注冊一個user32.dll動態(tài)庫中的函數(shù)SetWindowText,接受的參數(shù)是integer類型hwnd,string類型h的sWindowText,INTEGER類型的cch,返回值為intger類型DECLAREINTEGERGetWindowTextINuser32;INTEGERhwnd,;STRING@lp
3、String,;INTEGERcchHwnd=thisform.hwndHwnd=thisform.hwndStext=space(250)lnlen=250SetWindowText(Hwnd,@customtext,lnlen)沒錯,多了一個伊妹兒的符號:@,注意調(diào)用的時候也得加入該符號,此符號的意思是說參數(shù)sWidowText是按引用傳遞的,為什么要這么用呢,原因是我們要用函數(shù)GetwindowText的得到一個窗體(Form)標(biāo)題.GetwindowText的職責(zé)就是將我們要的值填入sWidowText中,如果調(diào)用成功你就會看到sWidowText的值已經(jīng)改變.此處你要明白所謂的按引
4、用傳遞有如C中的指針,我們只是該內(nèi)容的地址為參數(shù)傳給GetwindowText,它直接在地址指向的內(nèi)存單元上修改數(shù)據(jù).所以我們才可能看到sWidowText值在調(diào)用GetwindowText()函數(shù)就發(fā)生了改變。以上兩種就是最基本的windowsapi定義了.對于簡單的函數(shù)一般都可以這樣解決.也許此時你有疑問,你是在哪里知道這些函數(shù)的詳細(xì)信息的?很好很好,有問題是好的.那么請你打開msdn,什么?你不知道MSDN,我倒..^_^簡單而說msdn是涵蓋了大量內(nèi)容的幫助文檔,大部分的api在其中都有講述,有些還有小實(shí)例.在這里并不要求你要記住所有windows的api函數(shù),這不可行也不可能,只要
5、知道有它的存在,大概的功能,用時查msdn就可以,更重要的是知道怎么去把它糾出來,然后理解它.如果你現(xiàn)在沒有安裝MSDN,我強(qiáng)烈建議你馬上下載一個msdn2005.該幫助文檔大部分都是E文,你得有點(diǎn)心理準(zhǔn)備.鍵入SetWindowText查詢,你就會看到所有相關(guān)的函數(shù)原型,參數(shù)及返回值的解釋.此時查詢后你看到一些莫名其妙的返回值類型和參數(shù)類型.如:DWORD,LPTSTR為什么不是integer,string呢?請聽我說,由于windowapi是基于c的,而C中有一種叫宏定義的東西,而DWORD,LPTSTR就是一種宏罷了,宏定義時一般以大寫出現(xiàn),只不過是類型的另一種叫法而已再查詢DWORD
6、,LPTSTR你就可以看到它們的真面目,DWORD<=>無符號的32位的整型,LPTSTR<=>字符串指針注:<=>符號在此代表等價的意思原來DWORD與integer指的同一種數(shù)據(jù)類型.這就好比有一天在大街上你可能看到一個漂亮的女孩,很是心動,你可能稱她為美女或者天使,但最終美女或天使指向的都是這個女孩,不過就是這個女孩的代名詞而已.下面我以C為例說明以不同類型來讀取相同內(nèi)存區(qū)域后會得到怎么樣的內(nèi)容,我希望你以內(nèi)存的角度來看。這些原理是相通的,和語言無關(guān),只是C來講比較方便罷了,所以我選擇它來讓問題簡單化.此步將有助于你理解怎么在foxpro處理含有結(jié)構(gòu)參數(shù)的一些復(fù)雜API函數(shù),雖然這一部
7、分比較枯燥,但我還是希望你努力看下去.如果這道坎過了,下來也就容易許多先來看看簡單的變量聲明:假設(shè)你的系統(tǒng)上int類型占4個字節(jié),inticount=0x11ff;//那么該語句將為你開辟一個四字節(jié)的內(nèi)存空間,假設(shè)0x11ff存入內(nèi)存單元:0x000420000之處,那么內(nèi)存中是這樣的內(nèi)存地址內(nèi)存單元的內(nèi)容0x00420000:0xff0x00420001:0x110x00420002:00x00420003