Symbian中没有好用的类似excel效果的表格控件。搜索一番没有发现例子或者有用的东西,虽然很多商业软件上都有这样的效果,唯一可以确定的就是自己画,麻烦。
1.首先想到稍微有点类似的就是Grid,但由于其每行中的若干列是独立的,在设置焦点时比较麻烦,故最后也放弃了通过修改Grid实现这样的效果。
2.其次想到的是列表框listbox,其每行是独立,焦点转换简单,但需要自己在每行中设置 各列,并绘制对应网格线。
3.最后想到的是自己完全从头开始画,什么都靠自己的双手。
1比较难,我没想到好的方法,3就是比较烦,我觉得花过多的时间在UI上就是浪费生命,可是symbian却让我们浪费了很多很多。勉强选择2实现,首先参考了dev论坛上CustomListbox的设计,然后再其基础上实现网格效果。
先说 绘制网格线效果的几种方法:
1.先绘制Rect的边框,然后shrink,最后在shrink后的Rect中DrawText
iGc->DrawRect(textRect) ;
textRect.Shrink(1,1) ;
iGc->DrawText
效果: 纵向线因为画了两次 会比横向线粗一倍。
2.设置ListBox控件背景为白,然后在 DrawActualItem函数中 设置Brush颜色,shrinkRect,然后在DrawText绘制时会将Rect的背景设置成Brush的颜色。背景的白色作为网格线。
//iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
//iGc->SetBrushColor(TRgb(100,100,100)) ;
效果:如果listbox中有列表项的背景区域为设置的颜色,无列表项的背景区域为原来的白色。另外,选中项需另外处理。
3.设置ListBox控件的寄宿控件的背景为黑,然后在 DrawActualItem函数中 shrink Rect , 然后DrawText是绘制白色背景,Shrink出现的缝隙作为网格线。
效果:listbox中有列表项的区域有 网格线,无列表项的区域无 网格线,因为网格线在 DrawActualItem设置。
4.在ListBox控件的Draw函数中绘制 网格线,然后在DrawActualItem函数中 将text填入对于的区域。