在第二人生的
UI显示里,滚动列表也使用比较多的,由于多项列表选择的情况下,使用滚动列表往往使用界面使用起来更方便实用。如下面的登录界面,就有使用到滚动列表的控件:
从上图里可以看到最右边使用到一个滚动列表来显示不同的服务器,这样方便用户选择不同的服务器登录。那这个滚动列表是怎么样实现的呢?接着下来就分析这个类的代码,类的继承关系如下:
#001 class LLScrollListCtrl : public LLUICtrl, public LLEditMenuHandler,
#002
public LLCtrlListInterface, public LLCtrlScrollInterface
它的显示代码如下:
#001 void LLScrollListCtrl::draw()
#002 {
判断这个控件是否可见,如果可见就显示出来。
#003
if( getVisible() )
#004
{
判断是否需要排序。
#005
// if user specifies sort, make sure it is maintained
#006
if (needsSorting() && !isSorted())
#007
{
#008
sortItems();
#009
}
#010
是否需要显示滚动条。
#011
if (mNeedsScroll)
#012
{
#013
scrollToShowSelected();
#014
mNeedsScroll = FALSE;
#015
}
#016
LLRect background(0, getRect().getHeight(), getRect().getWidth(), 0);
显示滚动列表的背景。
#017
// Draw background
#018
if (mBackgroundVisible)
#019
{
#020
LLGLSNoTexture no_texture;
#021
gGL.color4fv( getEnabled() ? mBgWriteableColor.mV : mBgReadOnlyColor.mV );
#022
gl_rect_2d(background);
#023
}
#024
更新显示列宽度。
#025
if (mColumnsDirty)
#026
{
#027
updateColumns();
#028
mColumnsDirty = FALSE;
#029
}
#030
下面开始显示所有列表元素。
#031
drawItems();
#032
是否有边框显示,如果有就显示出来。
#033
if (mBorder)
#034
{
#035
mBorder->setKeyboardFocusHighlight(gFocusMgr.getKeyboardFocus() == this);
#036
}
#037
调用基类的显示函数。
#038
LLUICtrl::draw();
#039
}
#040 }
#041
通过上面的函数,就可以把上图看到的列表显示出来,下一次再来看看怎么样添加列表项和详细地显示列表项的代码。
第二人生开发包提供,价格198元/套(含邮费)。
包括内容如下:
1.
《第二人生的源码分析》PDF文档。
2.
第二人生客户端源程序。
3.
2G
U
盘一个,主要用来拷贝源程序以及相关开发工具。
提供三个月的技术服务,
提供快速编译指导,比如通过QQ远程编译操作。
提供完整的书参考。
联系方式:
QQ: 9073204
MSN: caimouse1976@sina.com
EMAIL: ccaimouse@gmail.com