Win 程序员如何过度到Symbian程序员?
http://tech.ddvip.com 2008年06月15日 社区交流
内容摘要:本文讨论了当一个典型的Windows C++程序员初次接触Symbian操作系统时可能遇到的问题。我们开发过三个成功版本Symbian操作系统的经验使我们十分清楚在这个不算丰富稳定的环境中工作什么才是困难的。
用这种方法,我们探究了一些其它的可能性,还研究了像控制栈以及Symbian称之为弹出窗口的东西,以后这可以使你按下按钮激活弹出选择列表时顺手拈来。这里进行了示范:iPopout = new (ELeave) CEikColumnListBox;iPopout->ConstructL(NULL,CEikListBox::EPopout);iPopout->CreateScrollBarFrameL();iPopout->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EAuto);iPopout->SetObserver(this);TSize popoutSize = TSize(width, height);TPoint popoutOrigin = TPoint(topLeft, bottomRight);iPopout->Model()->SetItemTextArray(iArray);iPopout->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);iPopout->ItemDrawer()->ColumnData()-> SetColumnWidthPixelL(0, firstColWidth);iPopout->ItemDrawer()->ColumnData()-> SetColumnWidthPixelL(1, secondColWidth);iPopout->SetExtent(popoutOrigin, popoutSize);iPopout->SetCurrentItemIndex(0);iEikonEnv->AddDialogLikeControlToStackL(iPopout);iPopout->ActivateL();iPopout->DrawNow();一种很早也很有趣的学习经验是必须手工书写代码来刷新和显示列表框的内容。刷屏代码很复杂,而且要跟踪所有的插入和删除并不是一件轻而易举的事。无论什么样的刷新率,我们都希望代码可以在刷新过程的最后得到正确显示的结果而不管刷新了什么,还不能丢掉滚动条的位置和选区,也不能产生不必要的闪屏和闪烁感。Symbian操作系统在基础列表框类中提供了叫做HandleItemRemovalL和HandleItemAdditionL的功能。另外还有设置当前项的SetCurrentItemIndex.但是在Symbian操作系统第5版中没有关于这些函数如何工作的文档。我们只能通过研究源代码才知道HandleItemAdditionL隐式使用了DrawNow,但是HandleItemRemovalL不负责重绘。被HandleItemRemovalL所调用的Reset也不得不通过源代码来理解,当前项索引在调用HandleItemRemovalL后需要刷新。这种处理重绘的不对称性看起来很奇怪又带有很多潜在问题。但是有个好消息就是在目前的Symbian操作系统文档中,所有这些都清楚明白的被收录在你能找到的地方。
责编:豆豆技术应用