国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何提高調用WindowAPI函數編程技巧

2019-11-18 17:34:16
字體:
來源:轉載
供稿:網友
做為一個不斷進取的編程者,我們常常不滿足于編程語言所提供的一般功能,總是希望能夠實現一些特殊的功能,這有時不但是我們程序的要求,有時也是編程者心理上需要(試想,還會有什么比在深夜中巧妙解決一個難題而更令人興奮呢?)。VisualBasic,做為一個當前最流行的快速編程環境,就給我們提供了實現這些目標的平臺,事實上,它無限擴展的API接口可以實現所有WINDOWS下可以實現的功能。然而對于初學者來說,"浩瀚"的API函數總是顯得那么神奇與不可琢磨,因此在實際應用過程中不能夠靈活應用。下面我將結合兩個小例子來示范介紹VB中調用API函數的步驟和功能,并總結說明在實際工作中如何提高這方面的技巧。例子在WINDOWS98下采用VB6.0編譯。
一.限制鼠標的移動
----有時我們的軟件要求用戶在未完成某一任務時,鼠標不能移出當前活動控件,換句話就是將鼠標限制在控件的內部,直到任務完成或用戶中斷為止。這個功能借助API函數實現起來思路很清楚,代碼也很簡潔。其思路是先確定當前鼠標的位置;然后確定當前活動控件的大小;最后將鼠標限制在活動控件內。(下面忽略項目建立等過程)
----1.建立一個新項目:新窗體為form1,在form1上添加一個commandbutton,設置其Name=CMButton1;Caption="將鼠標限制在此按鈕中"

----2.拷貝API函數和POINTAPI結構:打開VB6.0自帶的API瀏覽器,調入WIN32API.txt文件,復制以下結構和函數聲明到form1的聲明部分:

hwndAsLong,lpPointaspOINTAPI)AsLong
'用來確定當前鼠標的位置

PrivateDeclareFunctionCltmpRect.Left=(.Left/Screen.TwipsPerPixelX)
tmpRect.Top=(.Top/Screen.TwipsPerPixelY)
tmpRect.Right=(.Left .Width)/Screen.TwipsPerPixelX
tmpRect.Bottom=(.Top .Height)/Screen.TwipsPerPixelY
else
pt.X=0
pt.Y=0
CallClientToScreen(.hWnd,pt)
'獲取當前控件在屏幕上的位置
tmpRect.Left=pt.X
'保存當前控件位置
tmpRect.Top=pt.Y
pt.X=.Width
pt.Y=.Height
CallClientToScreen(.hWnd,pt)
tmpRect.Bottom=pt.Y
tmpRect.Right=pt.X
EndIf
CallClipCursor(tmpRect)
EndWith
EndSub

----4.在CMButton1_Click()中加入以下代碼
StaticClipedAsBoolean
'靜態變量用來控制狀態切換
IfNotClipedThen
ConfineToCmbutton1
Cliped=True
Else
ConfineToScreen'取消鼠標限制
Cliped=True
EndIf

----5.運行后,鼠標點擊cmbutton1,此時鼠標只能被鎖定在此按鈕內部,再次點擊按鈕,限制取消。
二.創建臨時文件
----臨時文件用來保存軟件運行過程中的臨時變化,這對于熟悉
Word等軟件的人來說,經常會遇到。那么臨時文件是如何產生的呢,其實很簡單,只需要一個API函數就可以。
----1.拷貝聲明函數(方法同前)

PrivateDeclareFunctionGetTempFileNameLib"kernel32"_
Alias"GetTempFileNameA"(ByVallpszPathAsString,_
ByVallpPrefixStringAsString,ByValwUniqueAsLong,_
ByVallpTempFileNameAsString)AsLong
參數定義如下:
lpszPath=傳入保存臨時文件的路徑,如"C:/mytemp"
lpPrefixString=傳入臨時文件名開始的前三個字母,
起到幫助識別臨時文件來源的作用。
wUnique=0,windows隨機產生文件名;否則安其值定義文件名。
lpTempFileName=返回隨機文件名

----2.返回臨時文件名
PrivateFunctionGenTempName(sPathAsString)
DimsPrefixAsString
DimlUniqueAsLong
DimsTempFileNameAsString

IfIsEmpty(sPath)ThensPath="c:/temp"
sPrefix="TVB"
lUnique=0'windows隨機給名

sTempFileName=Space$(100)
GetTempFileNamesPath,sPrefix,lUnique,sTempFileName
sTempFileName=Mid$(sTempFileName,1,
InStr(sTempFileName,Chr$(0))-1)'去掉多余空格
GenTempName=sTempFileName
EndFunction

----3.將下面代碼加入到form1_click()事件中
MsgBoxGenTempName("c:/temp")

----4.運行,鼠標點擊form,彈出msgbox,顯示生成"c:/temp/TVB724.tmp"文件,用文件管理器查看,在c:/temp下有TVB724.tmp文件,長度為0K。
----需要注意的是,傳入的路徑必須是有效路徑,否則GenTempName函數返回0,lpTempFileName中也沒有臨時文件名。

三.結束語
----從上面可以看出,API函數的確簡單高效,但也充滿一些看似高深的變量而使人卻步。我們不禁會問,究竟什么時候要用到API函數?具體哪些函數可以解決我的問題?,那些函數中的變量都代表什么?其實對這些問題,即使對一個VB高手也難給出明確的回答,因為API函數庫實在太龐大了,每一個人最終只能熟悉其中的一小部分(這也可能是調用API的文章層出不窮的原因吧)。總結自己的一點經驗,我覺得應該注意以下幾點。
----1.熟練掌握VB基本技巧,了解其所能所不能,這是最基本的要求。

----2.了解WINDOWS內部控制機理,這樣對一些復雜的問題就可以逐步分析其調用機制,初步確定采用哪部分的API函數來解決問題。

----3.案頭必備一本最新的VB版的WINDOWSAPI大全,推薦機械工業出版社的<>。書中給出了每一個VB可以調用的API函數的詳細說明,可以幫助精確了解所需要的API函數的變量聲明。

----4.多看別人的程序。報紙雜志,尤其是網上這方面的文章數不清。這是最快的方法。

----5.隨用隨查。永遠不要在用不到的函數上浪費寶貴的時間->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 花莲市| 双流县| 和平县| 东源县| 延长县| 雅安市| 泌阳县| 格尔木市| 高淳县| 马山县| 绥中县| 万载县| 合水县| 乐平市| 潮州市| 太白县| 呈贡县| 石台县| 广饶县| 常宁市| 涪陵区| 南乐县| 乌鲁木齐市| 大洼县| 临澧县| 东乡族自治县| 贵阳市| 奇台县| 习水县| 三门峡市| 紫阳县| 句容市| 海南省| 双江| 南汇区| 华安县| 伊宁市| 瑞丽市| 永春县| 温泉县| 镇安县|