一、概述
控件是子窗口,它們是系統已經定義好的窗口類,因此不需要注冊、
也不需要寫消息處理函數。
在主窗口得到WM_CREATE消息時,建立子窗口即可。
二、實例
//參數:窗口句柄,消息,消息參數,消息參數
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
//處理感興趣的消息
switch (message)
{
case WM_CREATE:
CreateWindow(TEXT("BUTTON"), //控件"類名稱"
TEXT("按鈕(&A)"),
WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
10,
10,
100,
100,
hwnd,
(HMENU)1000, //控件ID
((LPCREATESTRUCT) lParam)->hInstance, //實例句柄
NULL);
return 0;
case WM_DESTROY:
//當用戶關閉窗口,窗口銷毀,程序需結束,發退出消息,以退出消息循環
PostQuitMessage (0) ;
return 0 ;
}
//其他消息交給由系統提供的缺省處理函數
return ::DefWindowProc (hwnd, message, wParam, lParam) ;
}
三、關於WM_CREATE消息
WM_CREATE 的lParam參數將會傳入一個建立時信息結構指針(LPCREATESTRUCT)。
結構中包含了一些有用信息(窗口建立時的參數)。
typedef struct tagCREATESTRUCT {
LPVOID lpCreateParams;
HINSTANCE hInstance; //實例句柄
HMENU hMenu;
HWND hwndParent;
int cy;
int cx;
int y;
int x;
LONG style;
LPCTSTR lpszName;
LPCTSTR lpszClass;
DWORD dwExStyle;
} CREATESTRUCT, *LPCREATESTRUCT;
四、控件與父窗口的協作
1.控件上發生動作時,將向父窗口發送通知消息WM_COMMAND。
WM_COMMAND:
HIWORD(wParam):通知碼(notification code)
LOWORD(wParam):控件ID
(HWND)lParam: 控件句柄
除了WM_COMMAND外,每種控件還有可能有其他的通知消息(如WM_DRAWITEM)。
2.父窗口需要控制控件時,向控件發控件消息。
事先應記錄下控件句柄,或由ID獲取控件句柄
3.備注:
各種控件的通知消碼和控制消息可由
MSDN-> Platform SDK-> User Interface Services->Windows User Interface->Controls
查得。
五、控件"類名稱"
1.標准控件
BUTTON :按鈕
COMBOBOX :復合框
EDIT :編輯
LISTBOX :列表
RichEdit :Rich Edit version 1.0
RICHEDIT_CLASS :Rich Edit version 2.0
SCROLLBAR :滾動條
STATIC :靜態
2.外殼附帶的公用控件
注:建立前需要用InitCommonControlsEx進行初始化
INITCOMMONCONTROLSEX icex;// Ensure that the common control DLL is loaded.
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_LISTVIEW_CLASSES;
InitCommonControlsEx(&icex);
HWND hWndListView =CreateWindowEx(0,WC_LISTVIEW, //WC_LISTVIEW不需要加引號
TEXT(""),
WS_CHILD | WS_VISIBLE|WS_BORDER | LVS_ICON | LVS_EDITLABELS | WS_EX_CLIENTEDGE ,
10,
10,
100,
100,
hwnd,
(HMENU)1000, //控件ID
((LPCREATESTRUCT) lParam)->hInstance, //實例句柄
NULL);
}
ANIMATE_CLASS
DATETIMEPICK_CLASS
HOTKEY_CLASS
MONTHCAL_CLASS
PROGRESS_CLASS
REBARCLASSNAME
STATUSCLASSNAME
TOOLBARCLASSNAME
TOOLTIPS_CLASS
TRACKBAR_CLASS
UPDOWN_CLASS
WC_COMBOBOXEX
WC_HEADER
WC_IPADDRESS
WC_LISTVIEW
WC_PAGESCROLLER
WC_TABCONTROL
WC_TREEVIEW
3.特殊窗口
MDIClient :MDI客戶區窗口
ComboLBox :The class for the list box contained in a combo box.
DDEMLEvent :Windows NT/2000: The class for DDEML events.
Message :Windows 2000: The class for a message-only window.
#32768 :The class for a menu.
#32769 :The class for the desktop window.
#32770 :The class for a dialog box.
#32771 :The class for the task switch window.
#32772 :Windows NT/2000: The class for icon titles.