Windows SDK編程之建立控制項
一、概述
控制項是子視窗,它們是系統已經定義好的視窗類別,因此不需要註冊、也不需要寫訊息處理函數。
在主視窗得到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 :efWindowProc (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. |