2024年3月9日发(作者:)

VS2021和MFC编程入门之24(常用控件:列表框控件ListBox)

vs2021mfc编程入门之二十四(常用控件:列表框控件listbox)

了解了比较常用的按钮控件,并通过按钮控件实例说明了具体用法。本文要讲的是列

表框控件(listbox)及其使用实例。列表框控件简介

列表框得出了一个选项目录,容许用户从中展开单项或多项挑选,被选上的项会

CT8325BBP表明。列表框可以分成单选列表框和多挑选列表框,顾名思义,单选列表框中

一次就可以挑选一个列表项,而多挑选列表框可以同时挑选多个列表项。

列表框也会向父窗口发送通知消息。这些通知消息及含义如下:

lbn_dblclk:用户用鼠标双击了一列表项,只有具备lbs_notify的列表框就可以传

送该消息

lbn_errspace:列表框不能申请足够的动态内存来满足需要lbn_killfocus:列表框

失去输入焦点

lbn_selcancel:当前的挑选被中止,只有具备lbs_notify的列表框就可以传送该消

lbn_selchange:单击鼠标选择了一列表项,只有具有lbs_notify的列表框才能发送

该消息

lbn_setfocus:列表框赢得输出焦点

wm_chartoitem:当列表框收到wm_char消息后,向父窗口发送该消息,只有具有

lbs_wantkeyboardinput风格的列表框才会发送该消息

wm_vkeytoitem:当列表框接到wm_keydown消息后,向父窗口传送该消息,只有具备

lbs_wantkeyboardinput风格的列表框才可以传送该消息

列表框控件的创建

mfc将列表框控件的所有操作方式都PCB至了clistbox类中。

创建列表框控件时,可以在对话框模板中直接拖入列表框控件listbox,然后添加控

件变量使用。但如果需要动态创建列表框,就要用到clistbox类的create成员函数了。

create成员函数的原型如下:

virtualboolcreate(dworddwstyle,constrect&rect,cwnd*pparentwnd,uintnid);

参数rect指定了列表框的位置和尺寸,pparentwnd为父窗口的指针,nid用于指定

列表框控件的id。最后重点讲讲参数dwstyle,它指定了列表框控件的风格,以下是各种

风格说明:

lbs_extendedsel:积极支持多重选择,在页面列表项时握住shift键或ctrl键即可

挑选多个项

lbs_hasstrings:指定一个含有字符串的自绘式列表框lbs_multicolumn:指定一个

水平滚动的多列列表框,通过调用clistbox::setcolumnwidth来设置每列的宽度

lbs_multiplesel:积极支持多重选择。列表项的挑选状态随着用户对该项单击或双

击鼠标而滑动

lbs_nointegralheight:列表框的尺寸由应用程序而不是windows指定。通常,

windows指定尺寸会使列表项的某些部分隐藏起来

lbs_noredraw:当挑选发生变化时避免列表框被更新,可以传送消息发生改变该风格

lbs_notify:当用户单击或双击鼠标时通告父窗口

lbs_ownerdrawfixed:指定自绘式列表框,即由父窗口负责绘制列表框的内容,并且

列表项有相同的高度

lbs_ownerdrawvariable:选定自绘式列表框,并且列表项存有相同的高度

lbs_sort:使插入列表框中的项按升序排列

lbs_standard:相等于选定了ws_border|ws_vscroll|lbs_sortlbs_usetabstops:并

使列表框在表明列表项时辨识并拓展制表符(‘t’),预设的制表宽度就是32个对话框

单位

lbs_wantkeyboardinput:允许列表框的父窗口接收wm_vkeytoitem和wm_chartoitem

消息,以响应键盘输入

lbs_disablenoscroll:并使列表框在不能须要翻转时表明一个严禁的横向滚动条

dwstyle可以是以上所列风格的组合。与其他控件一样,除了这些风格一般还要为列

表框控件设置ws_child、ws_visible、ws_tabstop、ws_border、ws_vscroll等风格。一

般创建单选列表框时,风格要设置为:

ws_child|ws_visible|ws_tabstop|lbs_standard,如果不期望列表框项排序表明则

应当换成lbs_standard。建立多挑选列表框时,只须要在单选列表框风格后嵌入

lbs_multiplesel或lbs_extendedsel风格。

对于对话框模板中直接添加的列表框控件,其属性页中的属性包含了以上风格,例如

属性multicolumn对应的就是lbs_multicolumn风格。

clistbox类的主要成员函数

intgetcount()const;

返回值:回到列表框中列表项的数目,如果出现错误则回到lb_err。

intgetsel(intnindex)const;

参数:nindex选定某个列表项的索引。

返回值:返回nindex指定列表项的状态。如果此列表项被选择了则返回一个正值,

否则返回0,若发生错误则返回lb_err。

intsetsel(intnindex,boolbselect=true);

此函数只用于多选列表框,使用它可以选择或取消选择指定的列表项。

参数:nindex选定某个列表项的索引,若为-1则相等于选定了所有列表项。bselect

为true时挑选选定列表项,否则中止挑选选定列表项。返回值:如果出现错误则回到

lb_err。

intaddstring(lpctstrlpszitem);

此函数用以向列表框中嵌入字符串。如果列表框选定了lbs_sort风格,字符串就被

以排序顺序填入至列表框中,如果没选定lbs_sort风格,字符串就被嵌入至列表框的结

尾。

参数:lpszitem指定了要添加的字符串。

返回值:回到字符串在列表框中嵌入的边线。如果出现错误则回到lb_err,内存比较

则回到lb_errspace。

intinsertstring(intnindex,lpctstrlpszitem);

该函数用以在列表框中的选定边线填入字符串。与addstring函数相同的就是,

insertstring函数不能引致lbs_sort风格的列表框再次排序。不要在具备lbs_sort风格

的列表框中采用insertstring函数,以免毁坏列表项的次序。

参数:。参数nindex给出了插入位置(索引),如果值为-1,则字符串将被添加到

列表的末尾。参数lpszitem指定了要插入的字符串。

返回值:回到实际的填入边线,若出现错误,可以回到lb_err或lb_errspace。

intdeletestring(uintnindex);该函数用于删除指定的列表项。参数:nindex指定了

要删除项的索引。

返回值:函数的返回值为剩的列表项数目,如果nindex少于了实际的表项总数,则

回到lb_err。

voidresetcontent();

该函数用作去除所有列表项。

intgettext(intnindex,lptstrlpszbuffer)const;voidgettext(intnindex,cstring&rstr

ing)const;

这两个成员函数用作以获取选定列表项的字符串。参数nindex选定了列表项的索引。

参数lpszbuffer指向一个发送字符串的缓冲区。提及参数rstring则选定了发送字符串

的cstring对象。第一个版本的函数可以回到赢得的字符串的长度,若失效,则回到

lb_err;第二个版本的函数则不能。

intgettextlen(intnindex)const;

该函数回到选定列表项的字符串的字节长度。参数:nindex选定了列表项的索引。返

回值:若失效则回到lb_err。

intgetcursel()const;

该函数仅适用于于单选列表框,用以回到当前被选择项的索引,如果没列表项被挑选

或存有错误出现,则函数回到lb_err。

intsetcursel(intnselect);

该函数仅适用于于单选列表框,用以挑选选定的列表项。该函数可以翻转列表框以并

使选择项可知。参数nindex选定了列表项的索引,若为-1,那么将去除列表框中的挑选。

若失效函数回到lb_err。

intgetselcount()const;

该函数仅用作多重选择列表框,它回到选择项的数目,若失效函数回到lb_err。

intfindstring(intnstartafter,lpctstrlpszitem)const;

该函数用作对列表项展开与大小写毫无关系的搜寻。参数nstartafter选定了已经开

始搜寻的边线,合理选定nstartafter可以大力推进搜寻速度,若nstartafter为-1,则

从头开始搜寻T5800