Win32經常使用API講解

Win32經常使用API講解

  • MessageBox

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

參數含義:緩存

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

消息返回值:spa

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

Demo:指針

  1. #include <windows.h>
  2.  
  3. int WINAPI WinMain(
  4. HINSTANCE hInstance,
  5. HINSTANCE hPrevInstance,
  6. LPSTR lpCmdLine,
  7. int nCmdShow){
  8. int chioce = MessageBox(NULL,"HelloWorld","Test",MB_OKCANCEL | MB_ICONINFORMATION);
  9. if(chioce = IDOK){
  10. MessageBox( NULL,"You choosed OK","Test",MB_OK | MB_ICONINFORMATION);
  11. }
  12. return 0;
  13. }
  • 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)code

參數含義:對象

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 序大的窗口遮擋

相關文章
相關標籤/搜索