2020-12-23

MiniGUI - 列表框

CTRL_LISTBOX

 

类型

单选列表框(默认)

多选列表框

高级列表框,含图标、位图或者复选框

 

风格选项

LBS_MULTIPLESEL 多选

LBS_USEICON 使用位图bitmap或图标icon

LBS_CHECKBOX 带复选框

LBS_NOTIFY 产生通知消息

LBS_SORT 排序

WS_BORDER 边框

WS_VSCROLL 垂直滚动条

WS_HSCROLL 水平滚动条

 

消息

1. 添加条目

1) 添加纯字符串的条目

添加字符串到列表框最后一项:SendMessage (hwndList, LB_ADDSTRING, 0, (LPARAM)string);

创建列表框时指定LBS_SORT选项则自动排序

 

添加字符串到列表框指定位置:SendMessage (hwndList, LB_INSERTSTRING, index, (LPARAM)string);

index=-1时,添加到最后一项

创建列表框时指定LBS_SORT选项则自动排序,忽略index

2) 添加含图标的条目

LISTBOXITEMINFO lbii;

 

lbii.hIcon = LoadIconFromFile (HDC_SCREEN, "res.ico", 1); 

lbii.cmFlag = CMFLAG_CHECKED;

lbii.string = "abcdefg";

 

SendMessage (hwndList , LB_ADDSTRING, 0, (LPARAM)&lbii);

3) 添加含位图的条目

LISTBOXITEMINFO lbii;

 

lbii.hIcon = (DWORD) GetSystemBitmap (SYSBMP_MAXIMIZE);

lbii.cmFlag = CMFLAG_CHECKED | IMGFLAG_BITMAP;

lbii.string = "abcdefg";

 

SendMessage (hwndList , LB_ADDSTRING, 0, (LPARAM)&lbii);

4) 添加多个纯字符串条目

int num = 2;

const char text[num][] = {“item1”, “item2”};

 

SendMessage (hwndList, LB_MULTIADDITEM, num, (LPARAM)text);

5) 添加多个含图标、位图或复选框的条目

int num = 2;

LISTBOXITEMINFO lbii[num]; 

 

lbii[0].hIcon = LoadIconFromFile (HDC_SCREEN, "res1.ico", 1);

lbii[0].cmFlag = CMFLAG_CHECKED;

lbii[0].string = "item1";

 

lbii[1].hIcon =LoadIconFromFile (HDC_SCREEN, "res2.ico", 1);

lbii[1].cmFlag = CMFLAG_CHECKED;

lbii[1].string = "item2";

 

SendMessage (hwndList, LB_MULTIADDITEM, num, (LPARAM)lbii);

返回值:

LB_ERRSPACE 内存不足

LB_ERR 其他原因错误

LB_OKAY 成功

 

2. 删除条目

删除指定条目:SendMessage (hwndList, LB_DELETESTRING, index, 0);

清空列表框内容:SendMessage (hwndList, LB_RESETCONTENT, 0, 0);

 

3. 选择和取得条目

获取条目个数:int count = SendMessage (hwndList, LB_GETCOUNT, 0, 0);

获取指定条目字符串长度:int length = SendMessage (hwndList, LB_GETTEXTLEN, index, 0);

获取指定条目字符串: int length = SendMessage (hwndList, LB_GETTEXT, index, (LPARAM)buffer);

设置指定条目字符串:SendMessage (hwndList, LB_SETTEXT, index, buffer);

设置高级列表框指定条目:

LISTBOXITEMINFO lbii;

lbii.hIcon = LoadIconFromFile (HDC_SCREEN, "res.ico", 1);

lbii.cmFlag = CMFLAG_CHECKED;

lbii.string = "set item";

SendMessage (hwndList  , LB_SETITEMDATA, index, (LPARAM)&lbii);

 

获取高级列表框指定条目:

LISTBOXITEMINFO lbii;

SendMessage (hwndList  , LB_GETITEMDATA, index, (LPARAM)&lbii);

单选列表框设置选中条目:SendMessage (hwndList, LB_SETCURSEL, index, 0);

单选列表框获取选中条目的索引项:int index = SendMessage (hwndList, LB_GETCURSEL, 0, 0);

如果没有条目被选中,返回LB_ERR

多选列表框设置指定条目的选中状态:SendMessage (hwndList, LB_SETSEL, wParam, (LPARAM)index);

wParam非0则选择并加亮某一条目,0则取消选中

多选列表框获取指定条目的选中状态:int select = SendMessage (hwndList, LB_GETSEL, index, 0);

select非0则选中,0则没选中

多选列表框获取当前选中的条目个数:int sel_count = SendMessage (hwndList, LB_GETSELCOUNT, 0, 0L);

多选列表框获取当前选中的条目索引:

int* sel_items;

sel_items = alloca (sizeof(int)*sel_count);

SendMessage (hwndList, LB_GETSELITEMS, sel_count, sel_items);

查找含有指定字符串的条目:

模糊匹配:int index = SendMessage (hwndList, LB_FINDSTRING, (LPARAM)string);

精确匹配:int index = SendMessage (hwndList, LB_FINDSTRINGEXACT, (LPARAM)string);

 

4. 设置和获取复选框状态

获取指定条目的复选框状态:int status = SendMessage (hwndList, LB_GETCHECKMARK, index, 0);

返回值:

CMFLAG_CHECKED 选择状态

CMFLAG_PARTCHECKED 部分选择状态

CMFLAG_BLANK 未选择状态

LB_ERR 没有找到指定条目

 

设置指定条目的复选框状态:int ret = SendMessage (hwndList, LB_SETCHECKMARK, index, (LPARAM)status);

返回值:

LB_OKAY 成功

LB_ERR 没有找到指定条目

 

5. 设置指定条目加粗显示

int ret = SendMessage (hwndList, LB_SETITEMBOLD, index, (LPARAM)status) ; 

参数:status为1则加粗,0则正常显示

 

6. 自定义排序方式

static int my_strcmp (const char* s1, const char* s2, size_t n);

SendMessage (hwndList, LB_SETSTRCMPFUNC, 0, (LPARAM)my_strcmp);

 

7. 附加数据

设置附加数据:

int addData

SendMessage(hwndList , LB_SETITEMADDDATA, index , addData);

 

获取附加数据:

int addData

addData = SendMessage(hwndList , LB_GETITEMADDDATA, curSel, 0);

8. 设置和获取条目高度

设置条目高度:SendMessage(hwndList , LB_SETITEMHEIGHT, 0, (LPARAM)height);

获取条目高度:int height = SendMessage(hwndList , LB_GETITEMHEIGHT, 0, 0);

 

通知

1. 具有 LBS_NOTIFY 风格的列表框可能产生的通知消息

LBN_ERRSPACE    内存分配失败。

LBN_SELCHANGE    单项选择列表框的当前选择项发生变化。

LBN_CLICKED    用户在列表框某条目上单击了鼠标左键。

LBN_DBLCLK    用户在列表框某条目上双击了鼠标左键。

LBN_SELCANCEL    用户取消了某个条目的选择。

LBN_SETFOCUS    列表框获得了输入焦点。

LBN_KILLFOCUS    列表框失去了输入焦点。

LBN_CLICKCHECKMARK    用户单击了条目的检查框。

LBN_ENTER    用户在列表框中按下 ENTER 键

2. 如果调用SetNotificationCallback函数设定了列表框控件的通知回调函数,则控件不会向父窗口发送 MSG_COMMAND 通知消息,而是会直接调用设定的通知回调函数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值