分类:
2010-10-19 22:57:32
属性返回对应于列表框中第一个选定项的整数值。通过在代码中更改 值,可以编程方式更改选定项;列表中的相应项将在 Windows 窗体上突出显示。如果未选定项,则 值为 -1。如果选定列表中的第一个项,则 值为 0。当选定多个项时, 值反映在列表中第一个出现的选定项。 属性类似于 ,但它返回项本身,通常是字符串值。 属性反映列表的项数,由于 是从零开始的,所以 属性的值通常比 的最大可能值大一。
若要在 控件中添加或删除项,请使用 、、 或 方法。或者,可以在设计时使用 属性向列表添加项。
列表框的消息
列表框的消息包含在WM_COMMAND中,LOWORD(wParam)中是列表框标识符,HIWORD(wParam)中是具体消息。有些消息由Windows处理,有些消息要由程序处理,这类消息包括:
LBN_DBLCLK
//双击列表框中的某一项 (0x203/*_WM_LBUTTONDBLCLK*/)
LBN_ERRSPACE
//列表框不能分配足够的内存实现一个要求
LBN_KILLFOCUS
//列表框失去键盘焦点
LBN_SELCANCEL
//取消对某一项的选择
LBN_SELCHANGE
//列表框中被选中的某项要被改变
LBN_SETFOCUS
//列表框得到键盘焦点
用SendMessage 或
SendDlgItemMessage向列表框发送的消息包括
LB_ADDFILE //用DlgDirList函数将一个文件加入目录列表框中并返回该项索引addfile
LB_ADDSTRING
//添加字符串到列表框返回索引
LB_DELETESTRING //从列表框移除一个字符串返回列表框剩余表项 delete
LB_DIR
//添加文件名列表,返回最后一个添加的文件名的索引
LB_FINDSTRING
//返回第一个与指定字符串匹配的索引 find
LB_FINDSTRINGEXACT //返回具有某一指定前缀的索引
LB_GETANCHORINDEX //返回鼠标最后选中的项的索引
LB_GETCARETINDEX //返回具有矩形焦点的项的索引
LB_GETCOUNT
//返回列表框中项的个数
LB_GETCURSEL
//返回当前被选中项的索引
LB_GETHORIZONTALEXTENT //返回列表框的可滚动的宽度(单位:象素)
LB_GETITEMDATA //返回和给定项相关联的32位值
LB_GETITEMHEIGHT //返回列表框中某一项的高度(单位:象素)
LB_GETITEMRECT //获得列表项的客户区的RECT
LB_GETLOCALE
//获得区域信息,高位国家代码,低位语言标识符
LB_GETSEL
//返回列表项选中状态
LB_GETSELCOUNT //返回被选中列表项的数目
LB_GETSELITEMS
//创建一个被选中项的索引数组,返回被选中项个数
LB_GETTEXT
//获得和给定项相关联的字符串和串长度
LB_GETTEXTLEN
//返回和给定项相关联的字符串长度(单位:字符)
LB_GETTOPINDEX //返回列表框中第一个可见项的索引
LB_INITSTORAGE //为指定项数和相关字符串分配内存
LB_INSERTSTRING //在列表框中指定位置插入字符串 add
LB_ITEMFROMPOINT //获得与指定点最近的项的索引
LB_RESETCONTENT //从列表框中移除所有项 clear
LB_SELECTSTRING //选择与给定前缀相匹配的第一个字符串
LB_SELITEMRANGE //选择给定范围内的表项
LB_SETANCHORINDEX //设置鼠标最后选中的表项成指定表项
LB_SETCARETINDEX //设置矩形焦点到指定表项
LB_SETCOLUMNWIDTH //设置列的宽度(单位:象素)
LB_SETCOUNT
//设置表项数目 count
LB_SETCURSEL
//选择被给定的列表项
LB_SETHORIZONTALEXTENT //设置列表框的滚动宽度(单位:象素)
LB_SETITEMHIEGHT //设置表项高度(单位:项素)
LB_SETLOCALE
//设置区域,返回当前区域
LB_SETSEL
//在多选列表框中选中一个表项
LB_SETTOPINDEX //滚动列表使指定的项能显示出来
列表框可以使用的风格
风格 |
说明 |
LBS_DISABLENOSCROLL |
在不需滚动的时候也显示垂直滚动条 style=4096 |
LBS_EXTENDEDSEL |
在多选列表框中允许按住Shitf键同时选中一个范围 |
LBS_MULTIPLESEL |
允许多选,如果不定义的话则是单选列表框(msel=1) |
LBS_NOSEL |
列表框项目只能查看不能选择 |
LBS_NOTIFY |
用户点击或双击项目时向父窗口发送WM_COMMAND消息 |
LBS_SORT |
自动按字母顺序排序插入的项目 style=2 |
LBS_USETABSTOPS |
列表框项目的文本中允许将Tab字符的位置展开 |
LBS_STANDARD |
组合LBS_NOTIFY, LBS_SORT, WS_VSCROLL和WS_BORDER |
一般单选列表框只需定义LBS_STANDARD就可以了。
列表框使用说明:
当列表框有 LBS——NOTIFY风格的时候,用户有所动作时列表框会向父窗口发送WM_COMMAND,同时在wParam的高16位中指定通知码,列表框的通知码种类很少,基本上就是以下几种:
l LBN_DBLCLK 用户双击了一个项目。
l LBN_ERRSPACE 插入项目时无法申请到足够的内存。
l LBN_KILLFOCUS 输入焦点被切换到其他控件中,列表框丢失了焦点。
l LBN_SELCANCEL 用户撤销了一个选择。
l LBN_SELCHANGE 选定状态改变。
l LBN_SETFOCUS 列表框得到输入焦点。
namespace win.ui.ctrl;
import win.ui.ctrl.metaProperty;//导入控件属性元表支持
class listbox{
ctor(parent,tvalue){
if( tvalue ){
tvalue.style |= 0x1/*_LBS_NOTIFY*/;用户点击或双击项目时向父窗口发送WM_COMMAND消息
//tvalue.style |= 0x2/*_LBS_SORT*/;自动按字母顺序排序插入的项目
//tvalue.style |= 0x800/*_LBS_EXTENDEDSEL*/; //应该加到右侧属性中,支持通过Shift键或者鼠标进行多选
if(tvalue.msel)
tvalue.style |= 0x8/*_LBS_MULTIPLESEL*/ 允许多选 msel=1
if(tvalue.edge) tvalue.exstyle |= 0x200/*_WS_EX_CLIENTEDGE*/;三维边框edge=1带阴影
}
}
clear = function(){//清除所有项
::SendMessage(this.hwnd , 0x184/*_LB_RESETCONTENT*/, null,null)
}
delete = function(i){//删除选定项
::SendMessage(this.hwnd , 0x182/*_LB_DELETESTRING*/, topointer( this.selIndex-1 ),null)
}
旧版记录
|
add = function( str,ind=-1){//listbox添加项 默认尾部添加,头部添加为1
if(ind<0)
ind = this.count + ind +1;
else
ind--;
::SendMessage(this.hwnd , 0x181/*_LB_INSERTSTRING*/, topointer(ind),str)
}
|
addfile = function( str){//listbox添加文件到列表项 DlgDirList
::SendMessage(this.hwnd , 0x196/*_LB_ADDFILE*/, ,str)
}
find = function( str ){//在列表框里查找指定的项
return ::SendMessage(this.hwnd , 0x18F/*_LB_FINDSTRING*/, topointer( this.selIndex-1 ), str ) + 1;
}
findEx = function( str ){//精确查找指定的项
return ::SendMessage(this.hwnd , 0x1A2/*_LB_FINDSTRINGEXACT*/, , str ) + 1;
}
获取指定项区块位置\n返回::RECT() 结构体
getItemRect = function(ind,rc){ //获得列表项的客户区的RECT
rc := ::RECT();
var ret = ::SendMessageByStruct(this.hwnd,0x198/*_LB_GETITEMRECT*/,ind-1,rc);
..io.print(ret,..lasterr())
return rc;
}
getItemText = function(ind){ //获取指定项文本
var len = ::SendMessageInt(this.hwnd, 0x18A/*_LB_GETTEXTLEN*/, ind-1,0) ; //返回和给定项相关联的字符串长度(单位:字符)
var ret,text = ::SendMessageByString(owner.hwnd , 0x189/*_LB_GETTEXT*/,ind-1,len); //获得和给定项相关联的字符串和串长度
return text;
}
返回指定客户区坐标所在的项索引.
getAt = function(x,y){
var rc = ::RECT()
for(i=1;this.count){
this.getItemRect(i,rc);
if( ::PtInRect(rc,x,y) )
return i;
}
}
selectRange = function( first ,last){//指定选择的范围 在多选状态下的列表框中选择一个或多个连续的条目
return ::SendMessage(this.hwnd , 0x183/*_LB_SELITEMRANGEEX*/, topointer( 1 ), topointer( ::MAKELONG(first, last) ));
}
用SendMessage发送一个LB_SETSEL信息,可以一次选中所有项。?似乎只可选择1个项
["select"] = function (ind, selected=true) { //在多选列表框中选中一个表项
::SendMessageInt(this.hwnd,0x185/*_LB_SETSEL*/,selected?1:0,ind-1);
}
select(1) 1是指定项目,可以为2,或为3 !listbox.select(1,false) = 取消选中指定项
!listbox.selected(1) = 是否选中
selected = function(ind){//返回列表项选中状态
return ::SendMessageInt(this.hwnd,0x187/*_LB_GETSEL*/,ind-1,0);
}
@metaProperty;
}
listbox.metaProperty = ..win.ui.ctrl.metaProperty(
列表项数目
count = {
_get = function(){ //返回列表框中项的个数
return ::SendMessage(owner.hwnd, 0x18B/*_LB_GETCOUNT*/ )
}
_set = function( v ){//设置表项数目
::SendMessage(owner.hwnd, 0x1A7/*_LB_SETCOUNT*/, topointer(v) )
}
};
selIndex = {//获取或设置列表框当前选中项
_get = function(){ //返回当前被选中项的索引
return ::SendMessage(owner.hwnd, 0x188/*_LB_GETCURSEL*/, null,null) +1
}
_set = function( v ){ //选择被给定的列表项
::SendMessage(owner.hwnd,0x186/*_LB_SETCURSEL*/,topointer(v-1));
}
};
selText = {//获取或设置当前选中的文本
_get = function(){ /返回当前被选中项的索引
var sel = ::SendMessage(owner.hwnd, 0x188/*_LB_GETCURSEL*/) ;
if(sel>-1){//选择被给定的列表项
var len = ::SendMessage(owner.hwnd, 0x18A/*_LB_GETTEXTLEN*/, topointer(sel)) ;
var ret,text = ::SendMessageByString(owner.hwnd, 0x189/*_LB_GETTEXT*/,sel,len+1); //获得和给定项相关联的字符串和串长度
return ret ? ..string.str( text );
}
}
_set = function( v ){ //选择与给定前缀相匹配的第一个字符串
::SendMessage(owner.hwnd, 0x18C/*_LB_SELECTSTRING*/, ,v);
}
};
items = {//列表项集合\table对象
_get = function(){ //返回列表框中项的个数
var count = ::SendMessage(owner.hwnd, 0x18B/*_LB_GETCOUNT*/, null);
tab = {};
for(i=1;count){
..table.push(tab,owner.getItemText(i) )
}
return tab;
}
_set = function( v ){
for(i=1;#(v) ){ //添加字符串到列表框返回索引
::SendMessage(owner.hwnd , 0x180/*_LB_ADDSTRING*/, null,v[i]);
}
}
}
)
?win.ui.ctrl.listbox =!listbox.
!listbox.clear() = 清除列表框所有内容
!listbox.delete() = 删除当前选中项
!listbox.getItemText(__/*项索引*/) = 获取指定项文本
!listbox.getItemRect(__/*项索引*/) = 获取指定项区块位置\n返回::RECT() 结构体
!listbox.getAt(x,y) = 返回指定客户区坐标所在的项索引.
!listbox.add(__/*请输入文本*/) = 添加列表项到尾部
!listbox.add(__/*请输入文本*/,-1) = 添加列表项到尾部
!listbox.add(__/*请输入文本*/,1) = 添加列表项到头部
!listbox.selIndex = 获取或设置列表框当前选中项
!listbox.selText = 获取或设置当前选中的文本
!listbox.hwnd = 控件句柄
!listbox.id = 控件ID
!listbox.parent = 父窗口
!listbox.parent.hwnd = 父窗口句柄
!listbox.disabled = 控件ID
!listbox.left = 左侧坐标
!listbox.right = 右侧坐标
!listbox.top = 顶部坐标
!listbox.bottom = 底部坐标
!listbox.count = 列表项数目
!listbox.selectRange(1,__) = 选中指定范围
!listbox.select(1) = 选中指定项
!listbox.select(1,false) = 取消选中指定项
!listbox.selected(1) = 是否选中
!listbox.findEx(__/*请输入文本*/) = 精确查找指定的项\n找不到返回0
!listbox.find(__/*请输入文本*/) = 在列表框里查找指定的项\n找不到返回0
!listbox.addfile(__/*请输入路径*/) = 向列表框里增加一个文件(包括目录)
!listbox.redraw() = 刷新
!listbox.items = 列表项集合\ntable对象
!listbox.show(true__) = 显示控件
!listbox.rect = 控件区块位置(::RECT结构体)
!listbox.clientRect = 控件客户区块位置(::RECT结构体)
!listbox.font = 控件字体(::LOGFONT结构体)
!listbox.clientRect = 获取控件客户区块位置(::RECT结构体)
!listbox.theme = 外观主题,例如\nwinform.button.theme = "Explorer"\nwinform.button.theme = false
!listbox.modifyStyle(.(remove,add) = 如果指定第三个参数,则使用此参数调用::SetWidnowPos
!listbox.modifyStyleEx(.(remove,add) = 如果指定第三个参数,则使用此参数调用::SetWidnowPos
!listbox.close() = 关闭控件窗
!listbox.capture = 是否捕获全局鼠标消自息
!listbox.invalidate(__/*可选使用::RECT()对象指定客户区*/) = 使窗口绘图区无效
!listbox.invalidate(__/*可选使用::RECT()对象指定客户区*/,0) = 使窗口绘图区无效\n不刷新背景
!listbox.update() = 重绘invalidate函数指定的区块
!listbox.setFocus() = 设置焦点
!listbox.setPos(.(x坐标,y坐标,宽,高,插入位置,参数) = 调整窗口位置或排序,所有参数可选\n同时指定x,y坐标则移动位置\n同时指定宽高则改变大小\n指定插入位置(句柄或_HWND前缀常量)则调整Z序
!listbox.getPos() = 返回相对坐标,宽,高\nx,y,cx,cy=win.getPos(hwnd)
chinaunix网友2010-12-26 02:50:02
http://topic.csdn.net/u/20101204/10/a543196e-37da-46b0-b187-7ab3fe1b08b4.html?r=70383437 http://bbs.chinaunix.net/thread-1038333-1-1.html
chinaunix网友2010-12-26 02:43:57
http://www.regexlab.com/zh/regref.htm http://tech.163.com/special/00091588/develop.html
chinaunix网友2010-12-25 03:33:47
http://blog.chinaunix.net/u3/117890/showart_2360791.html http://www.docin.com/p-44746869.html http://www.docin.com/p-57772497.html
chinaunix网友2010-12-25 03:31:13
http://www.bbtvu.ah.cn/jxfuwu/ZK/dzshw/%BC%EC%B2%E92005/vb/vb%BF%CE%BC%FE11/D3J/BL.HTM http://www.wps.cn/knowledge/knowledgeshow/tid-21849510.htm http://www.tongyi.com/educa/computer/lessons/scriptlanguage/VBScript/2.htm