程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> Windows SDK筆記(二):在窗口上建立控件

Windows SDK筆記(二):在窗口上建立控件

編輯:關於VC++

一、概述

控件是子窗口,它們是系統已經定義好的窗口類,因此不需要注冊、

也不需要寫消息處理函數。

在主窗口得到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.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved