Win32常用API講解

初講

  • MessageBox

函數作用:彈出一個對話框,典型的模態型對話框
函數原型:int WINAPI MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)

參數含義:

hWnd:該消息框的父窗口句柄,如果此參數爲NULL,則該消息框沒有父窗口
lpText:消息框的內容
lpCaption:消息框的標題
uType:對話框的按鈕樣式和圖標

按鈕樣式:

MB_OK:默認值,包含一個確認按鈕
MB_OKCANCEL:包含確定以及取消兩個按鈕
MB_YESNO:包含是以及否兩個按鈕
MB_ABORTRETRYIGNORE:包含終止,重試以及跳過三個按鈕
MB_YESNOCANCEL:包含是,否以及取消三個按鈕
MB_RETRYCANCEL:包含重試以及取消兩個按鈕

圖標樣式:

MB_ICONINFORMATION:藍色i
MB_ICONASTERISK:藍色i
MB_ICONQUESTION:藍色?
MB_ICONWARNING:黃色!
MB_ICONEXCLAMATION:黃色!
MB_ICONSTOP:紅色x
MB_ICONERROR:紅色x
MB_ICONHAND:紅色x

消息返回值:

IDYES:點擊是
IDNO:點擊否
IDOK:點擊確認
IDCANCE:點擊取消
IDABORT:點擊終止
IDRETRY:點擊重試
IDIGNORE:點擊忽略

Demo:

#include <windows.h>

int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow){
    int chioce = MessageBox(NULL,"HelloWorld","Test",MB_OKCANCEL | MB_ICONINFORMATION);
    if(chioce = IDOK){
        MessageBox(NULL,"You choosed OK","Test",MB_OK | MB_ICONINFORMATION);
    }
    return 0;
}
  • CreateWindow

函數作用:創建窗口實例!一個完整的窗口程序應該先註冊窗口類,創建窗口實例,設置窗口的顯示狀態,最後發送重繪消息以防被其它窗口覆蓋後不能刷新

函數原型:HWND CreateWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HANDLE hlnstance, LPVOID lpParam)

參數含義:

lpClassName:指向窗口類名
lpWindowName:指定標題或者靜態文本框文本
dwStyle:指定窗口風格(標題,邊框,滾動條...)
x:相對於父窗口的橫座標
y:相對於父窗口的縱座標
nWidth:窗口寬度
nHeight:窗口高度
hWndParent:指向父窗口的句柄
hMenu:該窗口使用的某種類型的菜單的句柄
hlnstance:與窗口相關聯的模塊實例的句柄
lpParam:指向 CREATESTRUCT 結構的指針,傳遞 WM_CREATE 消息

重點說明:
1.一般窗口程序套路是:RegisterClass -> CreateWindow -> ShowWindow -> UpdateWindow,按照面向對象實現很好理解,先註冊窗口類再實例化窗口,之後的 ShowWindow 是用於設置屬性讓窗口可見(WS_VISIBLE)或者不可見,UpdateWindow 是用來發送WM_PAINT消息更新窗口的

2.任何控件都屬於窗口,所以創建某個控件也是需要 CreateWindow 函數,傳入不同的 style 就表示不同的控件,比如:靜態文本static,按鈕button,編輯框edit,複選框Check Box

3.CreateWindow 會給普通窗口過程發送一個 WM_CREATE 消息,對於層疊,彈出式和子窗口,CreateWindow 給窗口發送WM_CREATEWM_GETMINMAXINFOWM_NCCREATE消息

  • BeginPaint

函數作用:當窗口收到 WM_PAINT 消息時,需要首先調用 BeginPaint 獲取設備環境句柄,在其它情況下需要使用 GetDC 來獲取設備環境句柄!因爲我們不能直接訪問硬件,所以需要藉助設備環境(Device Context)這個中間層間接訪問鍵盤,顯示器等硬件設備

函數原型:HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint)

參數含義:

hwnd:被重繪窗口的句柄
lpPaint:指向一個用來接收繪畫信息的 PAINTSTRUCT結構

當得到了設備環境句柄後,我們就可以調用圖形設備接口(GDI)中已經封裝好的函數,諸如:TextOut,DrawText,CreateMenu,CreateBitmap,Rectangle,CreatePen等

  • SendMessage

函數作用:主動發送一條消息給窗口

函數原型:LRESULT SendMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)

參數含義:

hWnd:目標窗口的句柄
msg:發送的消息
wParam:附加消息,某些特定的消息需要用到
lParam:附加消息,某些特定的消息需要用到
  • GetWindowText

函數作用:用於將指定窗口的標題文本(如果存在)拷貝到一個緩存區內,如果指定的窗口是一個控件,則拷貝控件的文本

函數原型:Int GetWindowText(HWND hWnd, LPTSTR lpString, Int nMaxCount)

參數含義:

hWnd:窗口或者控件句柄
lpString:指向接收文本的緩衝區指針
nMaxCount:最大的保存長度
  • SetWindowText

函數作用:用於改變指定窗口的標題欄的文本內容(如果窗口有標題欄),如果指定窗口是一個控件,則改變控件的文本內容

函數原型:BOOL SetWindowText(HWND hWnd, LPCTSTR lpString)

參數含義:

hWnd:要改變文本內容的窗口或控件的句柄
lpString:指向改變後的字符串指針
  • DialogBox

函數作用:從一個對話框資源中創建一個模態對話框,該函數直到指定的回調函數通過調用 EndDialog 函數中止模態的對話框才能返回控制。該函數通過調用 DialogBoxParam 實現

函數原型:int DialogBox(HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc)

參數含義:

hInstance:實例句柄
lpTemplate:對話框模板名
hWndParent:指定擁有對話框的窗口
lpDialogFunc:指向對話框過程的指針
  • CreateDialog

函數作用:創建一個非模態對話框,需要使用 DestroyWindow 結束該對話框。該函數通過調用 CreateDialogParam 實現

函數原型:HWND CreateDialog(HINSTANCE hlnstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC IpDialogFunc)

參數含義:

hInstance:標識該模塊的可執行文件含有對話框模板
lpTemplate:對話框模板名
hWndParent:指定擁有對話框的窗口
lpDialogFunc:指向對話框過程的指針

重點說明:
當關閉非模態對話框或者窗口時,會調用DestroyWindow,這個函數先發送 WM_DESTROY 消息,接着發送 WM_NCDESTROY 消息

  • LoadString

函數作用:從資源里加載字符串資源到 CString 對象裏,參數是資源 ID,同類型的還有LoadIconLoadCursor

函數原型:int WINAPI LoadStringA(HINSTANCE hInstance, UINT uID, LPSTR lpBuffer, int nBufferMax)

參數含義:

hInstance:應用程序實例句柄
uID:資源ID
lpBuffer:接收從資源裏拷貝字符串出來的緩衝區
nBufferMax:指明緩衝區大小
  • OutputDebugString

函數作用:輸出調式信息到 Debugger

函數原型:void OutputDebugString(LPCTSTR lpOutputString)

參數含義:

lpOutputString:在調試器中調試時,輸出的字符串
  • SetWindowPos

函數作用:改變一個子窗口,彈出式窗口或頂層窗口的尺寸,位置或Z序

函數原型:WINUSERAPI BOOL WINAPI SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)

參數含義:

hWnd:窗口句柄
hWndInsertAfter:窗口的 Z 順序
x:指定窗口新位置的左邊界
y:指定窗口新位置的頂邊界
cx:以像素指定窗口的新的寬度
cy:以像素指定窗口的新的高度
uFlags:窗口尺寸和定位的標誌
  • FindWindowEx

函數作用:在窗口列表中尋找與指定條件相符的第一個子窗口

函數原型:HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow)

參數含義:

hwndParent:要查找子窗口的父窗口句柄
hwndChildAfter:子窗口句柄,查找從在Z序中的下一個子窗口開始
lpszClass:指向一個指定了類名的空結束字符串
lpszWindow:指向一個指定了窗口名(窗口標題)的空結束字符串
  • AnimateWindow

函數作用:該函數在顯示與隱藏窗口時能產生特殊的效果,有兩種類型的動畫效果:滾動動畫和滑動動畫

函數原型:BOOL AnimateWindow(HWND hWnd, DWORD dwTime, DWORD dwFlags)

參數含義:

hWnd:指定產生動畫的窗口的句柄
dwTime:指明動畫持續的時間
dwFlags:指定動畫類型
  • MoveWindow

函數作用:改變指定窗口的位置和大小

函數原型:BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint)

參數含義:

hWnd:窗口的句柄
x:指定了CWnd的左邊的新位置
y:指定了CWnd的頂部的新位置
nWidth:指定了CWnd的新寬度
nHeight:指定了CWnd的新高度
bRepaint:指定了是否要重畫CWnd
  • EnumWindows

函數作用:枚舉所有屏幕上的頂層窗口,並將窗口句柄傳送給定義的回調函數。FindWindow 和它類似,只找頂層窗口不找子窗口

函數原型: BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)

參數含義:

lpEnumFunc:指向一個應用程序定義的回調函數指針
lPararm:指定一個傳遞給回調函數的應用程序定義值

回調函數原型:BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)

  • IsWindow

函數作用:判斷目標窗口是否存在

函數原型:BOOL IsWindow(HWND hWnd)

參數含義:

hWnd:目標窗口句柄
  • GetWindow

函數作用:返回與指定窗口有特定關係(如Z序或所有者)的窗口句柄

函數原型:HWND GetWindow(HWND hWnd, UNIT nCmd)

參數含義:

hWnd:窗口句柄
nCmd:說明指定窗口與要獲得句柄的窗口之間的關係

重要說明:
Z 序表示窗口層疊時的順序,Z 序越大窗口越靠前,即 Z 序小的窗口會被 Z 序大的窗口遮擋

終講

原本草稿都寫好了,打算一口氣把文件操作,進程操作以及網絡套接字相關 API 的常見函數及其參數都介紹一下,但是我不小心找到了大佬們漢化後的 Win32API參考手冊,我覺得我也不可能有這個介紹得詳細了!所以之後查 API 就用這個啦,英文好的朋友還可以直接去微軟官網找文檔

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章