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