一、ListView控制項屬於通用控制項CONTROL中的一種,在SDK編程方式時要使用通用控制項
必須包含comctl32.dll,所以代碼中要有標頭檔: commctrl.h 匯入庫:comctl32.lib
在使用通用控制項之前應該先調用InitCommonControls();初始化它
以ListView控制項為例:
InitCommonControls();
//子視窗形式使用LISTVIEW
CreateWindowEx(0,
//擴充風格
WC_LISTVIEW,
//這是系統定義的宏,WC_LISTVIEW對應
"SysListView32"
"123",
//視窗標題
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN
| LVS_REPORT | LVS_AUTOARRANGE | LVS_SHOWSELALWAYS
| LVS_SHAREIMAGELISTS | LVS_SINGLESEL ,
//視窗風格
(普通控制項風格在這裡設定,擴充風格要單獨設定)
0,
0,
//視窗大小
420,
//寬度一定要等於所有列寬的和,否則會看起來有空列
600,
hwnd,
//父視窗控制代碼
NULL,
//菜單控制代碼
hInstance,
//執行個體控制代碼
NULL
//建立參數
);
//也可以在對話方塊資源檔中以子控制項的方式使用
CONTROL "",IDC_LISTVIEW, "SysListView32", WS_BORDER | WS_TABSTOP
| LVS_REPORT | LVS_AUTOARRANGE | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SINGLESEL,
7,110,300,133
二、相關的函數操作
因為是SDK編程,所以對控制項的操作是向控制項發送SendMessage()來實現的
LISTVIEW中的相關訊息為:
1、LVM_SETTEXTCOLOR 和 LVM_SETTEXTBKCOLOR 訊息設定文本的前景和背景色
2、 LVM_GETNEXTITEM找到選中的行,對應ListView_GetNextItem宏將SendMessage打包為函數方式操作。
3、LVM_SETCOLUMNWIDTH設定列寬,對應ListView_SetColumnWidth
4、LVM_SETEXTENDEDLISTVIEWSTYLE設定擴充風格如:LVS_EX_FULLROWSELECT(選中一整行), LVS_EX_GRIDLINES(網路線),LVS_EX_CHECKBOXES(選擇按鈕),對應ListView_SetExtendedListViewStyle
5、LVM_INSERTCOLUMN插入新列,對應ListView_InsertColumn
6、LVM_INSERTITEM插入項目(行),對應ListView_InsertItem
7、LVM_SETITEM設定子項(行中的每列),對應ListView_SetItem
8、LVM_GETITEMCOUNT擷取項數,對應ListView_GetItemCount
9、LVM_DELETEITEM刪除項,對應ListView_DeleteItem
還有很多關於選中響應的訊息就不列舉了,可以在相應的標頭檔中去尋找
c:/Program Files/Microsoft SDKs/Windows/v6.0A/Include/CommCtrl.h
三、相關的結構
//
//配置列屬性
//
typedef struct _LVCOLUMN
{
//說明此結構中哪些成員是有效,LVCF_FMT = fmt有效,
//LVCF_SUBITEM = iSubItem有效,LVCF_TEXT = pszText有效,LVCF_WIDTH = lx有效
UINT mask;
//列的對齊
int fmt;
//列的初始寬度,以後您可以發送訊息LVM_SETCOLUMNWIDTH來改變列的寬度
int cx;
//列的標題
LPTSTR pszText;
//pszText所指向的緩衝區的大小
int cchTextMax;
//與列關聯的子項的索引值,從0開始,要查詢列的屬性時可以發送LVM_GETCOLUMN訊息,
//並在成員變數imask中指定LVCF_SUBITEM標誌,
//清單控制項將在iSubItem中返回插入時設定的iSubItem值
int iSubItem;
//與列關聯的映像列表中指定映像的索引值
int iImage;
//第幾列,0代表最左一列
int iOrder;
} LVCOLUMN, FAR *LPLVCOLUMN;
//
//配置項,通過向列表視圖發送LVM_INSERTITEM訊息來向其中添加項目
//
typedef struct _LVITEM
{
//說明LVITEM結構中哪些成員有效
UINT mask;
//項目的索引值(可以視為行號)從0開始
int iItem;
//子項的索引值(可以視為列號)從0開始
int iSubItem;
//子項的狀態,是否有焦點/高亮度顯示/被選中(由於被剪下)/被選中等
//還包括以1為基數的索引用來代表是否處使用重疊/狀態表徵圖
UINT state;
//狀態有效屏蔽位
UINT stateMask;
//主項或子項的名稱
LPTSTR pszText;
//pszText所指向的緩衝區大小
int cchTextMax;
//關聯映像列表中指定映像的索引值
int iImage;
//程式定義的32位參數,當您給項目排序時使用。
//當您告訴列表視圖對項目排序時,列表視圖將成對地比較項目
//它將會把兩個項目的lParam的值傳給您,這樣您就可以進行比較先列出那一個了
LPARAM lParam;
//表示映像位置縮排的單位
int iIndent;
} LVITEM, FAR *LPLVITEM;