VB程式設計基礎課
什麼是APIAPI文字遊覽器
API函數宣告資料型別與"型別安全"
常數結構
小結一些API函數集:控制項與訊息函數、硬體與系統函數、選單函數、繪圖函數
什麼是API
首先,有必要跟大家講一講,什麼是API。所謂API本來是為C和C++程式設計師寫的。 API說來說去,就是一種函數,他們包含在一個附加名為DLL的動態連線庫檔案中。用標準的定義來講,API就是Windows的32位元應用程式介面,是一系列很複雜的函數,訊息和結構,它使程式設計人員可以用不同類型的程式語言編制出的運行在Windows95和WindowsNT操作系統上的應用程式。可以說,如果你曾經學過VC,那麼API對你來說不是什麼問題。但如果你沒有學過VC,或是你對Windows95的結構體係不熟悉,那麼可以說,學習API將是一件很辛苦的事。
如果你開啟WINDOWS的SYSTEM資料夾,你可以發現其中有許多附加名為DLL的檔案。一個DLL包含的API函數不只一個,數十個,甚至是數百個。我們能都掌握它嘛?回答是否定的∶不可能掌握。但實際上,我們真的沒必要都掌握,只要重點掌握Windos系統本身自帶的API函數就可以了。但,其中也應拋開掉同VB本身自有的函數重複的函數。如,VB
的etAttr指令可以取得檔案屬性,SetAttr可以設定檔案屬性。對API來講也有對應的函數
GetFileAttributes和SetFileAttributes,效能都差不多。如此一算,剩下來的也就5、600個。是的,也不少。但,我可以敢跟你說,只要你熟悉地掌握100個,那麼你的程式等級比現在高出至少要兩倍。儘管人們說VB和WINDOWS有密切的關係,但我認為,API更接近
WINDOWS。如果你學會了API,首要的收穫就是對WINDOWS體系結構的認識。這個收穫是來自不易的。
如果你不依靠API會怎麼樣?我可以跟你說,絕大多是高級程式設計書本(當然這不是書的名程叫高級而高級的,而是在一開始的《本書內容》中指明《本書的閱讀對像是具有一定VB基礎的讀者》的那些書),首先提起的問題一般大都是從API開始。因此可以說,你不學API,你大概將停留在初級水平,無法往上攀登。唯一的途徑也許就是向別人求救∶我快死了,快來救救我呀,這個怎麼辦,那個怎麼辦?煩不煩呢?當然,現在網上好人太多(包括我在內,嘻嘻) ,但,你應當明白,透過此途徑,你的手中出不了好的作品。這是因為缺乏這些知識你的腦子裡根本行不成一種整體的設計構思。
API文字遊覽器[返回]
很多API函數都是很長很長的。想看什麼樣子嗎?如下就是作為範例的APIDdeClientTransaction函式∶
DeclareFunctionDdeClientTransactionLib"user32"(pDataAsByte,ByValcbDataAsLong,ByValhConvAsLong,ByValhszItemAsLong,ByValwFmtAsLong,ByValwTypeAsLong,ByValdwReoutAsLong,pTimeReultLong
哇!這麼長?如果你從來沒有接觸過API,我想你肯定被嚇住了。你也許考慮,該不該繼續學習。不過別擔心,幸運的是Microsoft的設計家們為我們提供了有用的工具,這便是API
文字檢視器。
透過API文字檢視器,我們可以方便地尋找程式所需的函數宣告、結構類型和常數,然後將它複製到剪貼簿,最後再貼上到VB程式的程式碼區段中。在大多數情況下,只要我們確定了程式所需的函數、結構和常數這三個面向後,就可以透過對API文字遊覽器的以上操作將他們加入到程式段中,從而程式中可以使用這些函數了。這些都是學習API最基本的常識問題,它遠遠佔不到API的龐大的體系內容。今後我們把精力浪費(這絕不浪費)在哪裡呢?那就是∶
什麼時候使用什麼函數,什麼時候使用什麼結構類型,什麼時候用什麼常數。
API函數聲明
讓我們回想一下。在VB中,如何聲明函數呢?我想,如果你正在看此文,那麼你絕對能夠回答得出這個問題。以下便是你應該很熟悉的函數宣告∶
FunctionSetFocus(ByValhwndAsLong)AsLong
即,這行程式碼定義了名為SetFocus的函數,此函數具有一個Long型資料型別的參數,並依值傳遞(ByVal),函數執行後將傳回一個Long型資料。
API函數的宣告也很類似,如,API中的SetFocus函數是這樣寫的∶
DeclareFunctionSetFocusLib"user32"Alias"SetFocus"(ByValhwndAsLong)AsLong
有點複雜了一些。是的,是複雜了點。但我可以告訴你,除了這些多出來的部分,其他部分還是跟你以前學到的東西是一樣的。函數在程式中的呼叫也是一樣。如:
DimdlAsLong
dl&=SetFoucs(Form1.Hwnd)
但,一點是清楚的。它不像你自己寫的程式那樣能夠看到裡面的運行機理,也不像VB
自帶的函數那樣,能夠從VB的聯機幫助中查到其用法。唯一的方法就是去學、查VB以外的資料。
Declare語句用於在模組層級中聲明動態連結庫(DLL)中外部程序的參考。對此,你只要記住任何API函數宣告都必須寫這個語句就可以了。
Iib指明包含所宣告過程或函數的動態連結函式庫或程式碼資源。也就是說,它說明的是,函數或過程是從何而來的問題。
如在上例中,SetFocusLib"user32"說明函數SetFocus來自user32.dll檔案。主要的dll動態連線庫檔案有∶
user32.dllWindows管理。產生和管理應用程式的使用者介面。
GDI32.dll圖形設備介面。產生Windows裝置的圖形輸出
Kernel32.dll系統服務。存取作業系統的電腦資源。
注意,當DLL檔案不在Windows或System資料夾中的時候,必須在函數中說明其出處(
路徑)。如,SetFocusLib"c:/Mydll/user32"
函數宣告中的Alias是可選的。表示將被呼叫的過程在動態連結函式庫(DLL)中還有另外的名稱(別名)。如,Alias"SetFocus",說明SetFocus函數在User32.dll中的另一個名稱是,
SetFocus。怎麼兩個名字都一樣呢?當然,也可以是不同的。在很多情況下,Alias所說明的函數名,即別名最後一個字元經常是字元A,如SetWindowsText函數的另一個名稱是
SetWindowsTextA,表示為Alias"SetWindowsTextA"。這個A只不過是設計家們的習慣的命名約定,表示函數屬於ANSI版本。
那麼,別名究竟有什麼用途呢?從理論上講,別名提供了用另一個名子呼叫API的函數方法。如果你指明了別名,那麼儘管我們按Declare語句後面的函數來呼叫該函數,但在函數的實際呼叫上是以別名作為首要選擇的。如,以下兩個函數(Function,ABCD)宣告都是有效的,他們呼叫的是同一個SetFocus函數∶
DeclareFunctionSetFocusLib"user32""SetFocus"(ByValhwndAsLong)AsLong
DeclareABCDSetFocusLib"user32"Alias"SetFocus"(ByValhwndAsLong)AsLong
要注意的是,選用Alias的時候,要注意別名的大小寫;如果不選用Alias時的時候,函數名必須注意大小寫,而且不能改動。當然,在很多情況下,由於函數宣告是直接從API
文字遊覽器中拷貝過來的,所以這種錯誤的發生機會是很少的,但您有必要知道這一點。
最後提醒你一句,API宣告(包括結構、常數)必須放在窗體或模組的"通用(GeneralDeclarations)區段。
資料型別與"型別安全"
API函數中使用的資料類型基本上和VB中的一樣。但作為WIN32的API函數中,不存在Integer
資料類型。另外一點是在API函數中看不到Boolean資料型別。 Variant資料型別在API函數中以Any的形式出現,如DataAsAny。儘管其意義是允許任意參數類型作為一個該API函數的參數傳遞,但這樣做存在一定的缺點。原因是,這將會使得對目標參數的所有類型檢查都會關閉。這自然會為各種類型的參數呼叫帶來了產生錯誤的機會。
為了強制執行嚴格的類型檢查,並避免上面提到的問題,一個方法是在函數裡使用上面提到到Alias技術。如對API函數GetDIBits可進行另外一種宣告方法。如下∶
GetDIBits函數的原型∶
PublicDeclareFunctionGetDIBitsLib"gdi32"Alias"GetDIBits"(ByValaHDCAsLong,ByValhBitmapAsLong,ByValnStartScanAsLong,ByValnNumScansAsLong,lpBitsAsAny,lpBIAsAsBITMAPFOF
GetDIBits函數的改型∶
PublicDeclareFunctionGetDIBitsLongLib"gdi32"Alias"GetDIBits"(ByValaHDCAsLong,ByValhBitmapAsLong,ByValnStartScanAsLong,ByValnNumScansAsLong,AsBitsAsLong,AsBIAsAITAUD,ByValnNumScansAsLong,AsBitsAsLong,AsBIB
透過本課程前面所學到的知識,我們已經可以得知原型GetDIBits函數也好,改型GetDIBitsLong函數也好,實際上將呼叫的都是Alias所指定的GetDIBits原函數。但你應當看到,兩者的差別在於,我們在改型的函數中強制指定lpBits參數為Long形。這樣就會使得函數呼叫中發生的錯誤機率減少到了最小。這種方法叫做"安全類型"聲明。
API函數中常看到的資料型別有∶Long,String,Byte,Any....(也就這些吧。)
常數
對於API常數來講,沒有什麼太特別的學問。請看VB中的以下程式碼∶
Msg=MsgBox("您好",vbOKCancel)
我們知道,vbOKCancel這個常數的值等於1。對上面的程式碼我們完全可以這樣寫,而不會影響程式碼的功能∶
Msg=MsgBox("您好",1)
但你大概不太願意選擇後者,因為這會讓你看懂代碼費勁起來。這種方法也被API採取了。只是API常數必須在事情之前做好初始化聲明VB本身是看不懂的。其內容仍來自與API
文字遊覽器。具體形式如下等等∶
PublicConstABM_ACTIVATE=&H6
PublicConstRIGHT_CTRL_PRESSED=&H4
PublicConstRPC_E_SERVER_DIED=&H80010007
PrivateConstRPC_S_CALL_FAILED_DNE=1727&
在常數的初始化中,有些程式使用Global,如GlobalConstABM_ACTIVATE=&H6,但我認為Public完全可以取代它。過去我也用過Global,但現在不大用了。一會兒用這個,一會兒用那個,各程式之間不能保持一致性了,起碼看起來彆扭。
結構[返回]
結構是C和C++語言中的說法。在VB中一般稱為自訂資料型別。想必很多朋友都已經認識它。在API領域裡,我更喜歡把它叫做結構,因為API各種結構類型根本不是我定義(
自訂)的。
在VB中,API結構同樣由TYPE.......ENDTYPE語句來定義。如,在API中,點(Point)結構的定義方法如下:
PublicTypePOINTAPI
XAsLong'點在X座標(橫座標)上的座標值
YAsLong'點在Y座標(縱座標)上的座標值
EndType
又如,API中矩形(Rect)結構的定義如下∶
PublicTypeRECT
LeftAsLong'矩形左上角的X座標
TopAsLong'矩形左上角的Y座標
RightAsLong'矩形右下角的X座標
BottomAsLong'矩形右下角的Y座標
EndType
這些內容同樣可以從API文字遊覽器中拷貝過來。這些結構中的變數名稱可隨意改動,而不會影響結構本身。也就是說,這些成員變數都是虛擬的。如,POINTAPI結構可改為如下∶
PublicTypePOINTAPI
MyXAsLong'點在X座標(橫座標)上的座標值
MyYAsLong'點在Y座標(縱座標)上的座標值
EndType
不過,一般來講,是沒有這種必要的。結構本身是一種資料類型,因此,使用時必須宣告具體變數為該結構型,才能在程式中真正使用到該結構。結構的宣告方法和其他資料的宣告方法一樣,如,以下語句把變MyPoint宣告為POINTAPI結構型別∶
MyPointAsPOINTAPI
引用結構中的成員變數也十分簡單,在結構名後面加上一個".",然後緊接著寫要引用的成員變數即可。這很像VB中的引用一個物件的某個屬性。如,假如我們把上面已經宣告的MyPoint結構中的X變數的值賦給變數Temp&
則代碼如下∶
Temp&=MyPoint.X
但,特別注意的是,你千萬不要認為上例中的MyPoint是一個值。它不是值,而是地址(
指針)。值和地址是完全不同的概念。結構要求按引用傳遞給WINDOWS函數,即所有API
函數中,結構都是按ByRef傳遞的(在Declare語句中ByRef是預設型)。對於結構的傳遞,你不要試圖採用ByVal,你將一無所獲。由於結構名其實是指向這個結構的指標(這個結構的首地址),所以,你也就傳送特定的結構名就可以了(參見小結,我用紅色字體來突出了這種傳遞方式)。
由於結構傳送的是指針,所以函數會直接對結構進行讀寫操作。這種特性很適合把函數執行的結果裝載在結構之中。
小結[返回]
以下的程序是為了總結本課中學到的內容而給予的。啟動VB,新建一個項目,增加一個命令按鈕,並把下面的程式碼拷貝到程式碼片段中,運行它。
PrivateDeclareFunctionGetCursorPosLib"user32"(lpPointAsPOINTAPI)AsLong
PrivateTypePOINTAPI'定義點(Point)結構
XAsLong'點在X座標(橫座標)上的座標值
YAsLong'點在Y座標(縱座標)上的座標值
EndType
SubPrintCursorPos()
DimdlASLong
DimMyPointAsPOINTAPI
dl&=GetCursorPos(MyPoint)'呼叫函數,取得螢幕滑鼠座標
Debug.Print"X="&Str(MyPoint.X)&"and"&"Y="&Str(MyPoint.Y)
EndSub
PrivateSubCommand1_Click()
PrintCursorPos
EndSub
輸出結果為(每次運行都可能得到不同的結果,這得由函數呼叫時滑鼠指標在螢幕中所處的位置而決定)∶
X=240andY=151
程式中,GetCursorPos函數用來取得滑鼠指標在螢幕上的位置。
以上例子中,你可以發現,以參數傳遞的MyPpint結構的內容在函數呼叫後發生了實質變化。這是由於結構是按ByRef傳遞的原因。
一些API函數集[返回]
WindowsAPI
1.控件與訊息函數
AdjustWindowRect給定一種視窗樣式,計算獲得目標客戶區矩形所需的視窗大小
AnyPopup判斷螢幕上是否存在任何彈出式窗口
ArrangeIconicWindows排列一個父視窗的最小化子視窗
AttachThreadInput連接執行緒輸入函數
BeginDeferWindowPos啟動建置一系列新視窗位置的流程
BringWindowToTop將指定的視窗帶至視窗清單頂部
CascadeWindows以層疊方式排列視窗
ChildWindowFromPoint傳回父視窗中包含了指定點的第一個子視窗的句柄
ClientToScreen判斷視窗內以客戶區座標表示的一點的螢幕座標
CloseWindow最小化指定的視窗
CopyRect矩形內容複製
DeferWindowPos此函數為特定的視窗指定一個新視窗位置
DestroyWindow清除指定的視窗以及它的所有子視窗
DrawAnimatedRects描繪一系列動態矩形
EnableWindow指定的視窗允許或禁止所有滑鼠及鍵盤輸入
EndDeferWindowPos同時更新DeferWindowPos呼叫時指定的所有視窗的位置及狀態
EnumChildWindows為指定的父視窗列舉子視窗
EnumThreadWindows枚舉與指定任務相關的視窗
EnumWindows枚舉視窗清單中的所有父視窗
EqualRect判斷兩個矩形結構是否相同
FindWindow尋找視窗清單中第一個符合指定條件的頂層視窗
FindWindowEx在視窗清單中尋找與指定條件相符的第一個子視窗
FlashWindow閃爍顯示指定視窗
GetActiveWindow取得活動視窗的句柄
GetCapture取得一個視窗的句柄,這個視窗位於目前輸入線程,並且擁有滑鼠擷取(滑鼠活動由它接收)
GetClassInfo取得WNDCLASS結構(或WNDCLASSEX結構)的副本,結構中包含了與指定類別相關的信息
GetClassLong取得視窗類別的Long變數條目
GetClassName為指定的視窗取得類別名稱
GetClassWord為視窗類別取得整數變數
GetClientRect傳回指定視窗客戶區矩形的大小
GetDesktopWindow取得一個代表整個螢幕的視窗(桌面視窗)句柄
GetFocus取得擁有輸入焦點的視窗的句柄
GetForegroundWindow取得前台視窗的句柄
GetLastActivePopup取得在一個給定父視窗中最近啟動過的彈出式視窗的句柄
GetLastError針對先前呼叫的api函數,用這個函數取得擴充錯誤訊息
GetParent判斷指定視窗的父視窗
GetTopWindow搜尋內部視窗列表,尋找隸屬於指定視窗的頭一個視窗的句柄
GetUpdateRect取得一個長方形,它描敘了指定視窗中需要更新的那一部分
GetWindow取得一個視窗的句柄,該視窗與某個來源視窗有特定的關係
GetWindowContextHelpId取得與視窗相關的說明場景ID
GetWindowLong從指定視窗的結構中取得訊息
GetWindowPlacement取得指定視窗的狀態及位置訊息
GetWindowRect取得整個視窗的範圍矩形,視窗的邊框、標題列、捲軸及選單等都在這個矩形內
GetWindowText取得一個窗體的標題(caption)文字,或一個控制項的內容
GetWindowTextLength調查視窗標題文字或控制項內容的長短
GetWindowWord取得指定視窗結構的訊息
InflateRect增加或減少一個矩形的大小
IntersectRect這個函數在lpDestRect裡載入一個矩形,它是lpSrc1Rect與lpSrc2Rect兩個矩形的交集
InvalidateRect屏蔽一個視窗客戶區的全部或部分區域
IsChild判斷一個視窗是否為另一個視窗的子或隸屬視窗
IsIconic判斷視窗是否已最小化
IsRectEmpty判斷一個矩形是否為空
IsWindow判斷一個視窗句柄是否有效
IsWindowEnabled判斷視窗是否處於活動狀態
IsWindowUnicode判斷一個視窗是否為Unicode視窗。這表示視窗為所有基於文字的訊息都接收Unicode文字
IsWindowVisible判斷視窗是否可見
IsZoomed判斷視窗是否最大化
LockWindowUpdate鎖定指定窗口,禁止它更新
MapWindowPoints將一個視窗客戶區座標的點轉換到另一個視窗的客戶區座標系統
MoveWindow改變指定視窗的位置和大小
OffsetRect透過套用一個指定的偏移,讓矩形移動起來
OpenIcon恢復一個最小化的程序,並將其激活
PtInRect判斷指定的點是否位於矩形內部
RedrawWindow重畫全部或部分窗口
ReleaseCapture為目前的應用程式釋放滑鼠捕獲
ScreenToClient判斷螢幕上一個指定點的客戶區座標
ScrollWindow捲動視窗客戶區的全部或一部分
ScrollWindowEx根據附加的選項,捲動視窗客戶區的全部或部分
SetActiveWindow啟動指定的視窗
SetCapture將滑鼠擷取設定到指定的視窗
SetClassLong為視窗類別設定一個Long變數條目
SetClassWord為視窗類別設定一個條目
SetFocusAPI將輸入焦點設為指定的視窗。如有必要,會啟動窗口
SetForegroundWindow將視窗設為系統的前台視窗
SetParent指定一個視窗的新父
SetRect設定指定矩形的內容
SetRectEmpty將矩形設為一個空矩形
SetWindowContextHelpId為指定的視窗設定幫助場景(上下文)ID
SetWindowLong在視窗結構中為指定的視窗設定訊息
SetWindowPlacement設定視窗狀態與位置資訊
SetWindowPos為視窗指定一個新位置和狀態
SetWindowText設定視窗的標題文字或控制項的內容
SetWindowWord在視窗結構中為指定的視窗設定訊息
ShowOwnedPopups顯示或隱藏由指定視窗所有的全部彈出式窗口
ShowWindow控制視窗的可見性
ShowWindowAsync與ShowWindow相似
SubtractRect裝載矩形lprcDst,它是在矩形lprcSrc1中減去lprcSrc2所得到的結果
TileWindows以平鋪順序排列視窗
UnionRect裝載一個lpDestRect目標矩形,它是lpSrc1Rect和lpSrc2Rect聯合起來的結果
UpdateWindow強制立即更新窗口
ValidateRect校驗視窗的全部或部分客戶區
WindowFromPoint傳回包含了指定點的視窗的句柄。忽略屏蔽、隱藏以及透明窗口
2.硬體與系統函數
ActivateKeyboardLayout啟動一個新的鍵盤佈局。鍵盤佈局定義了按鍵在一種實體鍵盤上的位置與意義
Beep用於產生簡單的聲音
CharToOem將一個字符串從ANSI字元集轉換到OEM字元集
ClipCursor將指標限製到指定區域
ConvertDefaultLocale將一個特殊的地方識別碼轉換成真實的地方ID
CreateCaret根據指定的資訊建立插入符(遊標),並將它選定為指定視窗的預設插入符
DestroyCaret清除(破壞)一個插入符
EnumCalendarInfo枚舉在指定「地方」環境中可用的日曆信息
EnumDateFormats列舉指定的「當地」設定中可用的長、短日期格式
EnumSystemCodePages枚舉系統中已安裝或支援的代碼頁
EnumSystemLocales枚舉系統已經安裝或提供支援的「地方」設置
EnumTimeFormats列舉一個指定的地方適用的時間格式
ExitWindowsEx退出windows,並以特定的選項重新啟動
ExpandEnvironmentStrings擴充環境字串
FreeEnvironmentStrings翻譯指定的環境字符串區塊
GetACP判斷目前生效的ANSI代碼頁
GetAsyncKeyState判斷函數呼叫時指定虛擬鍵的狀態
GetCaretBlinkTime判斷插入符遊標的閃爍頻率
GetCaretPos判斷插入符的目前位置
GetClipCursor取得一個矩形,用來描述目前為滑鼠指標規定的剪切區域
GetCommandLine取得指向目前命令列緩衝區的指標
GetComputerName取得這台電腦的名稱
GetCPInfo取得與指定代碼頁相關的信息
GetCurrencyFormat針對指定的「地方」設置,根據貨幣格式格式化一個數字
GetCursor取得目前所選的滑鼠指標的句柄
GetCursorPos取得滑鼠指標的目前位置
GetDateFormat針對指定的「當地」格式,對一個系統日期進行格式化
GetDoubleClickTime判斷連續兩次滑鼠點擊之間會被處理成雙擊事件的間隔時間
GetEnvironmentStrings為包含了目前環境字符串設定的一個記憶體區塊分配和傳回一個句柄
GetEnvironmentVariable取得一個環境變數的值
GetInputState判斷是否存在任何待決(等待處理)的滑鼠或鍵盤事件
GetKBCodePage由GetOEMCP取代,兩者功能完全相同
GetKeyboardLayout取得一個句柄,描述指定應用程式的鍵盤佈局
GetKeyboardLayoutList取得系統適用的所有鍵盤佈局的一個列表
GetKeyboardLayoutName取得目前活動鍵盤佈局的名稱
GetKeyboardState取得鍵盤上每個虛擬鍵目前的狀態
GetKeyboardType了解與正在使用的鍵盤有關的信息
GetKeyNameText在給予掃描碼的前提下,判斷鍵名
GetKeyState針對已處理過的按鍵,在最近一次輸入資訊時,判斷指定虛擬鍵的狀態
GetLastError針對先前呼叫的api函數,用這個函數取得擴充錯誤訊息
GetLocaleInfo取得與指定「地方」相關的信息
GetLocalTime取得本地日期與時間
GetNumberFormat針對指定的“地方”,以特定的格式格式化一個數字
GetOEMCP判斷在OEM和ANSI字元集間轉換的windows代碼頁
GetQueueStatus判斷應用程式訊息佇列中待決(等待處理)的訊息類型
GetSysColor判斷指定windows顯示物件的顏色
GetSystemDefaultLangID取得系統的預設語言ID
GetSystemDefaultLCID取得目前的預設系統“地方”
GetSystemInfo取得與底層硬體平台有關的資訊
GetSystemMetrics傳回與windows環境相關的訊息
GetSystemPowerStatus獲得與目前系統電源狀態相關的信息
GetSystemTime取得目前系統時間,這個時間採用的是「協同世界時間」(即UTC,也叫做GMT)格式
GetSystemTimeAdjustment使內部系統時脈與一個外部的時脈訊號源同步
GetThreadLocale取得目前執行緒的地方ID
GetTickCount用於取得自windows啟動以來所經歷的時間長度(毫秒)
GetTimeFormat針對目前指定的“地方”,以特定的格式格式化一個系統時間
GetTimeZoneInformation取得與系統時區設定相關的資訊
GetUserDefaultLangID為目前使用者取得預設語言ID
GetUserDefaultLCID取得目前使用者的預設「地方」設置
GetUserName取得目前使用者的名字
GetVersion判斷目前執行的Windows和DOS版本
GetVersionEx取得與平台和作業系統相關的版本訊息
HideCaret在指定的視窗隱藏插入符(遊標)
IsValidCodePage判斷一個代碼頁是否有效
IsValidLocale判斷地方識別碼是否有效
keybd_event這個函數模擬了鍵盤行動
LoadKeyboardLayout載入一個鍵盤佈局
MapVirtualKey根據指定的對映類型,執行不同的掃描碼和字元轉換
MapVirtualKeyEx根據指定的對映類型,執行不同的掃描碼和字元轉換
MessageBeep播放一個系統聲音。系統聲音的分配方案是在控制面板裡決定的
mouse_event模擬一次滑鼠事件
OemKeyScan判斷OEM字元集中的一個ASCII字元的掃描碼和Shift鍵狀態
OemToChar將OEM字元集的一個字符串轉換到ANSI字元集
SetCaretBlinkTime指定插入符(遊標)的閃爍頻率
SetCaretPos指定插入符的位置
SetComputerName設定新的電腦名
SetCursor將指定的滑鼠指標設為目前指標
SetCursorPos設定指標的位置
SetDoubleClickTime設定連續兩次滑鼠點擊之間能使系統認為是雙擊事件的間隔時間
SetEnvironmentVariable將一個環境變數設為指定的值
SetKeyboardState設定每個虛擬鍵目前在鍵盤上的狀態
SetLocaleInfo改變使用者「地方」設定訊息
SetLocalTime設定當前地方時間
SetSysColors設定指定視窗顯示物件的顏色
SetSystemCursor改變任何一個標準系統指針
SetSystemTime設定目前系統時間
SetSystemTimeAdjustment定時加入一個校正值使內部系統時鐘與一個外部的時脈訊號源同步
SetThreadLocale為當前執行緒設定地方
SetTimeZoneInformation設定係統時區資訊
ShowCaret在指定的視窗中顯示插入符號(遊標)
ShowCursor控制滑鼠指標的可視性
SwapMouseButton決定是否要互換滑鼠左右鍵的功能
SystemParametersInfo取得並設定數量眾多的windows系統參數
SystemTimeToTzSpecificLocalTime將系統時間轉換成地方時間
ToAscii根據目前的掃描碼和鍵盤訊息,將一個虛擬鍵轉換成ASCII字符
ToUnicode根據目前的掃描碼和鍵盤訊息,將一個虛擬鍵轉換成Unicode字符
UnloadKeyboardLayout卸載指定的鍵盤佈局
VkKeyScan針對Windows字符集中一個ASCII字符,判斷虛擬鍵碼與Shift鍵的狀態
完
3.選單函數
AppendMenu在指定的選單裡新增一個選單項
CheckMenuItem複選或撤銷複選指定的選單項目
CheckMenuRadioItem指定一個選單項目被複選成「單選」項目
CreateMenu建立新選單
CreatePopupMenu建立一個空的彈出式選單
DeleteMenu刪除指定的選單項目
DestroyMenu刪除指定的選單
DrawMenuBar為指定的視窗重畫選單
EnableMenuItem允許或禁止指定的選單條目
GetMenu取得視窗中一個選單的句柄
GetMenuCheckMarkDimensions傳回一個選單複選符號的大小
GetMenuContextHelpId取得一個選單的說明場景ID
GetMenuDefaultItem判斷選單中的哪個項目是預設項目
GetMenuItemCount傳回選單中項目(選單項目)的數量
GetMenuItemID傳回位於選單中指定位置的項目的選單ID
GetMenuItemInfo取得(接收)與一個選單項目相關的特定訊息
GetMenuItemRect在一個矩形中裝載指定選單項目的螢幕座標訊息
GetMenuState取得與指定選單項目狀態相關的信息
GetMenuString取得指定選單項目的字符串
GetSubMenu取得一個彈出式選單的句柄,它位於選單中指定的位置
GetSystemMenu取得指定視窗的系統選單的句柄
HiliteMenuItem控制頂級選單項目的加亮顯示狀態
InsertMenu在選單的指定位置插入一個選單項目,並根據需要將其他項目向下移動
InsertMenuItem插入一個新選單項目
IsMenu判斷指定的句柄是否為一個選單的句柄
LoadMenu從指定的模組或應用程式實例中載入一個選單
LoadMenuIndirect載入一個選單
MenuItemFromPoint判斷哪個選單項目包含了螢幕上一個指定的點
ModifyMenu改變選單條目
RemoveMenu刪除指定的選單項目
SetMenu設定視窗選單
SetMenuContextHelpId設定一個選單的幫助場景ID
SetMenuDefaultItem將一個選單項目設為預設項目
SetMenuItemBitmaps設定一個特定位圖,令其在指定的選單項目中使用,取代標準的複選符號(√)
SetMenuItemInfo為一個選單項目設定指定的訊息
TrackPopupMenu在螢幕的任意地方顯示一個彈出式選單
TrackPopupMenuEx與TrackPopupMenu相似,只是它提供了額外的功能
完
以下是幾個關於選單函數的類型定義
MENUITEMINFO這個結構包含了選單條目的信息
TPMPARAMS這個結構用於TrackPopupMenuEx函數以支援額外的功能
4.繪圖函數
AbortPath拋棄選入指定裝置場景中的所有路徑。也取消目前正在進行的任何路徑的創建工作
AngleArc用一個連接弧畫一條線
Arc畫一個圓弧
BeginPath啟動一個路徑分支
CancelDC取消另一個執行緒裡的長時間繪圖操作
Chord畫一個弦
CloseEnhMetaFile關閉指定的增強型圖元檔案設備場景,並將新建的圖元檔案傳回一個句柄
CloseFigure描繪到一個路徑時,關閉目前開啟的圖形
CloseMetaFile關閉指定的圖元檔案設備場景,並向新建的圖元檔案傳回一個句柄
CopyEnhMetaFile製作指定增強型圖元檔案的一個副本(拷貝)
CopyMetaFile製作指定(標準)圖元檔案的一個副本
CreateBrushIndirect在一個LOGBRUSH資料結構的基礎上建立一個刷子
CreateDIBPatternBrush用一幅與裝置無關的點陣圖建立一個刷子,以便指定刷子樣式(圖案)
CreateEnhMetaFile建立一個增強型的圖元檔案設備場景
CreateHatchBrush創建一個帶有陰影圖案的一個刷子
CreateMetaFile建立一個圖元檔案設備場景
CreatePatternBrush用指定了刷子圖案的一幅位圖創建一個刷子
CreatePen用指定的樣式、寬度和顏色建立一個畫筆
CreatePenIndirect根據指定的LOGPEN結構建立一個畫筆
CreateSolidBrush用純色創造一個刷子
DeleteEnhMetaFile刪除指定的增強型圖元文件
DeleteMetaFile刪除指定的圖元文件
DeleteObject刪除GDI對象,物件使用的所有系統資源都會被釋放
DrawEdge以指定的樣式描繪一個矩形的邊框
DrawEscape換碼(Escape)函數將資料直接發送至顯示裝置驅動程式
DrawFocusRect畫一個焦點矩形
DrawFrameControl描繪一個標準控件
DrawState為一幅圖像或繪圖作業應用各式各樣的效果
Ellipse描繪一個橢圓,由指定的矩形圍繞
EndPath停止定義一條路徑
EnumEnhMetaFile針對一個增強型圖元文件,列舉其中單獨的圖元文件記錄
EnumMetaFile為一個標準的windows圖元檔案列舉單獨的圖元檔案記錄
EnumObjects枚舉可隨同指定設備場景使用的畫筆和刷子
ExtCreatePen建立一個擴展畫筆(裝飾或幾何)
ExtFloodFill在指定的設備場景裡,用目前選擇的刷子填滿一個區域
FillPath關閉路徑中任何打開的圖形,並用當前刷子填充
FillRect用指定的刷子填滿一個矩形
FlattenPath將一個路徑中的所有曲線都轉換成線段
FloodFill用目前選定的刷子在指定的設備場景中填充一個區域
FrameRect用指定的刷子圍繞一個矩形畫一個邊框
GdiComment為指定的增強型圖元檔案裝置場景新增一則註解訊息
GdiFlush執行任何未決的繪圖操作
GdiGetBatchLimit判斷有多少GDI繪圖指令位於佇列中
GdiSetBatchLimit指定有多少GDI繪圖指令能夠進入佇列
GetArcDirection畫圓弧的時候,判斷目前所採用的繪圖方向
GetBkColor取得指定裝置場景目前的背景顏色
GetBkMode針對指定的裝置場景,取得目前的背景填滿模式
GetBrushOrgEx判斷指定裝置場景中目前選取刷子起點
GetCurrentObject取得指定類型的目前選取對象
GetCurrentPositionEx在指定的裝置場景中取得目前的畫筆位置
GetEnhMetaFile取得磁碟檔案所包含的一個增強型圖元檔案的圖元檔案句柄
GetEnhMetaFileBits將指定的增強型圖元檔案複製到一個記憶體緩衝區裡
GetEnhMetaFileDescription傳回對一個增強型圖元檔案的說明
GetEnhMetaFileHeader取得增強型圖元檔案的圖元檔案頭
GetEnhMetaFilePaletteEntries取得增強型圖元檔案的全部或部分調色盤
GetMetaFile取得包含在一個磁碟檔案中的圖元檔案的圖元檔案句柄
GetMetaFileBitsEx將指定的圖元檔案複製到一個記憶體緩衝區
GetMiterLimit取得設備場景的斜率限制(Miter)設置
GetNearestColor根據裝置的顯示能力,取得與指定顏色最接近的純色
GetObjectAPI取得對指定物件進行說明的一個結構
GetObjectType判斷由指定句柄所引用的GDI物件的類型
GetPath取得對目前路徑進行定義的一系列數據
GetPixel在指定的裝置場景中取得一個像素的RGB值
GetPolyFillMode針對指定的裝置場景,獲得多邊形填滿模式
GetROP2針對指定的設備場景,取得目前的繪圖模式
GetStockObject取得一個固有物件(Stock)
GetSysColorBrush為任何一種標準系統顏色取得刷子
GetWinMetaFileBits透過在一個緩衝區中填充用於標準圖元檔案的數據,將一個增強型圖元檔案轉換成標準windows圖元文件
InvertRect透過反轉每個像素的值,從而反轉一個裝置場景中指定的矩形
LineDDA列舉指定線段中的所有點
LineTo用目前畫筆畫一條線,從目前位置連到一個指定的點