列表框屬性

列表框

列表框允許用戶從多個對象中選擇一項或多項,這些對象可以是文本、文件和位圖等。當列表框的項不能全部顯示出來時,可以用滾動條來滾動顯示。

1. 基礎知識
默認的列表框只允許用戶單選,需要多選時,須把列表框的風格定義爲 LBS_ MULTIPLESEL 和 LBS_EXTENDEDSEL 。列表框提供的其他風格取值可以控制列表框的外觀和操作。例如是否按照列表框各項的名稱排序,是否多行排列,是否有滾動條等。

風格取值                   描述
LBS_EXTENDEDSEL           //能通過Shift鍵或者鼠標進行多選
LBS_HASSTRINGS            //可以用GetText函數得到列表框裏選項的字符串
LBS_MULTICOLUMN           //指定列表框以多列形式顯示內容
LBS_MULTIPLESEL           //用戶可以選擇多個項
LBS_NOINTEGRALHEIGHT      //當應用程序創建列表框時,列表框的大小由系統指定
LBS_NOREDRAW              //列表框不響應用戶的修改,可以通過發送WM_REDRAW 來取消該設置
LBS_NOTIFY                //讓主窗口接收列表框的任何改變的消息
LBS_OWNERDRAWFIXED        //主窗口負責列表框的重畫,列表框裏每項的高度相同
LBS_0WNERDRAWVARIABLE     //主窗口負責列表框的重畫,列表框裏每項的高度可以變化
LBS_SORT                  //按各項名稱的字母排序
LBS_STANDARD              //等同於LBS_SORT和LBS_NOTIFY
LBS_USETABSTOPS           //允許用戶使用Tab鍵在各項中切換
LBS_WANTKEYBOARDINPUT     //輸入焦點在列表框時,任何鍵盤輸入都會向父窗口發送WM_VKEYTOITEM或者WM_CHARTOITEM消息
LBS_DISABLENOSCROLI       //當列表框的項不夠時,垂直滾動條禁活:沒有該屬性時,滾動條隱藏

當用戶對列表框進行了操作時,就會向主窗口發送一條消息。列表框的消息類型比較簡單,主要是單擊、雙擊和選擇等。同編輯框一樣,列表框也會遇到內存不夠的問題,所以消息類型中含有這一項。消息總是通過WM_COMMAND的形式發送給主窗口的。其中,wParam的低位字節表示列表框的標識符,高位字節表示消息的類型,lParam表示主窗口句柄。列表框的消息類型如表所示。

消息類型                   描述
LB_DELETESTRING           //刪除指定的選項
LB_ADDFILE                //向列表框裏增加一個文件(包括目錄)
LB_FINDSTRING             //在列表框裏查找指定的項
LB_FINDSTRlNGEXACT        //精確查找指定的項
LB_GETCOUNT               //得到列表框裏項的數目
LB_GETCURSEL              //返回當前被選中選項的序號
LB_GETSEL                 //得到被選項的狀態,如果出錯,則返回零值
LB_GETSELCOUNT            //得到被選中的個數
LB_GETTEXT                //返回選中的文本,返回值爲字符串長度
LB_GETTEXTLEN             //返回字符串長度
LB_INITSTORAGE            //向列表框增加項之前存儲原來的內容
LB_INSERTSTRING           //向列表框增加一項,但不重新排序
LB_ITEMFROMPOINT          //返回離指定點最近項的序號
LB_RESETCONTENT           //清除列表框裏所有的項
LB_SELECTSTRING           //尋找指定的項
LB_SELITEMRANGE           //指定選擇的範圍
LB_SELITEMRANGEEX         //選定或者刪除指定的項
LB_SETCOLUMNWIDTH         //設置列的寬度
LB_SETCOUNT               //設置列表框裏項的最大數目
LB_SETCURSEL              //選中指定的項
LBN_DBLCLK                //發送用戶雙擊的消息
LBN_ERRSPACE              //發送內存空間不夠的消息
LBN_KILLFOCUS             //當列表框失去焦點時發送該消息
LBN_SELCANCEL             //當用戶取消選擇時發送該消息
LBN_SELCHANGE             //當用戶選擇改變時發送該消息
LBN_SETFOCUS              //當輸入焦點轉移到列表框時發送該消息
WM_CTLCOLORLISTBOX        //在列表框重畫時向父窗口發送該消息
WM_DELETEITEM             //刪除選項
WM_VKEYTOITEM             //輸入焦點在列表框裏,用戶按鍵時發送該消息

鼠標右鍵WM_CONTEXTMENU 消息就行了。wParam 是點擊右鍵的窗口的句柄,lParam 是鼠標座標。如果用戶使用 SHIFT+F10 來響應菜單,那麼 lParam 收到的座標都是 -1。
LOWORD(wParam) 子窗口ID
HIWORD(wParam) 通知碼
Lparam 子窗口句柄

 

2. 定義列
增加列需要用列的結構LVCOLUMN,定義如下:

typedef struct _LVCOLUMN {
UINT mask;                //定義該列可使用的類型
int fmt;                  //定義列格式
int cx;                   //定義列寬度(以像素爲單位)
LPTSTR pszText;           //列內容
int cchTextMax;           //列內容最大長度
int iSubItem;             //定義此列序號
#if (_WIN32_IE >= 0x0300)
int iImage;               //指向圖像
int iOrder;               //零基列偏移量。列偏移量是從左到右的順序。例如0列在最左邊。
#endif #if (_WIN32_WINNT >= 0x0600)
int cxMin;                //指定列寬最小值
int cxDefault;            //默認列寬
int cxIdeal;              //只讀,作爲列寬的理想寬度自動調整寬度大小
#endif
} LVCOLUMN, *LPLVCOLUMN;  //結構名稱

使用方法:
SendMessage(hwnd, LVM_INSERTCOLUMN, 0, (LPARAM)&colmn)
還有LVM_GETCOLUMN LVM_SETCOLUMN LVM_DELETECOLUMN

 

3. 改變項
改變項需要結構體LVITEM,定義如下:

typedef struct {
UINT mask;              //設置成員標誌,如格式等
int iItem;              //項目索引
int iSubItem;           //添加到的列序
UINT state;             //指明項目狀態,如圖片,疊加圖片
UINT stateMask;         //指state成員的有效位
LPTSTR pszText;         //項目內容
int cchTextMax;         //項目最大長度
int iImage;             //指向圖片索引
LPARAM lParam;          //特殊值,如果你用SORTITEM它就需要這個,或者別的特別的
#if (_WIN32_IE >= 0x0300)
int iIndent;            //圖片寬度
#endif
#if (_WIN32_WINNT >= 0x0501)
int iGroupId;           //指向所在的組id
UINT cColumns;          //需要展示的列數,最大爲20
UINT puColumns;         //返回這個項目所指向的列
#endif
#if (_WIN32_WINNT >= 0x0600)
int piColFmt;           //返回列屬性
int iGroup;             //項目列
#endif
} LVITEM, *LPLVITEM;

使用方法:
SendMessage(hres, LVM_INSERTITEM, 0, (LPARAM)&item);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章