1. 基本函數
1) 獲得子窗口的父窗口
hwndParent = GetParent(__in HWND hWnd);
SendMessage(hwndParent, Msg, wParam, lParam )
父窗口相應消息:
可以是 WM_USER或更大
2) 獲取應用程序實例:
HINSTANCE hInstance;
WM_CREATE:
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
HINSTANCE hInst = GetWindowLong(__in HWND hWnd, __in int nIndex);
HINSTANCE hInst = GetWindowLong(hWnd, GWL_HINSTANCE);
3) 由窗口句柄獲得窗口ID
id = GetWindowLong(hChildWnd, GWL_ID);
id = GetDlgCtrlID(hChildWnd);
4) 由父窗口句柄和子窗口ID獲得子窗口句柄
hChildWnd = GetDlgItem(hParentWnd, id);
2. 按鈕:
1) 消息類型
當用鼠標單擊按鈕時,子窗口控件就會向父窗口發送一個WM_COMMAND消息,消息含義如下:
LOWORD (wParam) HIWORD (wParam) lParam |
子窗口ID 通知碼 子窗口句柄 |
通知碼的含義:
按鈕通知碼標識符 |
值 |
BN_CLICKED |
0 |
BN_PAINT |
1 |
BN_HILITE or BN_PUSHED |
2 |
BN_UNHILITE or BN_UNPUSHED |
3 |
BN_DISABLE |
4 |
BN_DOUBLECLICKED or BN_DBLCLK |
5 |
BN_SETFOCUS |
6 |
BN_KILLFOCUS |
7 |
目前只使用通知碼6,7
2) 父窗口向子窗口發送消息
按鈕消息 |
值 |
BM_GETCHECK |
0x00F0 |
BM_SETCHECK |
0x00F1 |
BM_GETSTATE |
0x00F2 |
BM_SETSTATE |
0x00F3 |
BM_SETSTYLE |
0x00F4 |
BM_CLICK |
0x00F5 |
BM_GETIMAGE |
0x00F6 |
BM_SETIMAGE |
0x00F7 |
SendMessage (hwndButton, BM_SETSTATE, 1, 0) ;
SendMessage (hwndButton, BM_SETSTATE, 0, 0) ;
SendMessage ((HWND) lParam, BM_SETCHECK, (WPARAM) !SendMessage ((HWND) lParam, BM_GETCHECK, 0, 0), 0) ;
3) 設置按鈕文字
SetWindowText(__in HWND hWnd, __in_opt LPCSTR lpString)
SetWindowText(hChildWnd, pszString);
iLength = GetWindowText (hwnd, pszBuffer, iMaxLength) ;
iLength = GetWindowTextLength (hwnd) ;
4) 可見的和啓用按鈕
ShowWindow (hwndChild, SW_SHOWNORMAL) ;
ShowWindow (hwndChild, SW_HIDE) ; // SW_VISIBLE
BOOL b = IsWindowVisible(hwndChild);
EnableWindow(hwndChild, FALSE); // TRUE
IsWindowEnabled (hwndChild) ;