首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Symbian >

symbian初级有关问题

2012-02-26 
symbian初级问题刚开始学习symbian有个小问题这个代码是改变pane的标题TUidtitlePaneUidtitlePaneUid.iUi

symbian初级问题
刚开始学习symbian
有个小问题
这个代码是改变pane的标题
TUid   titlePaneUid;
titlePaneUid.iUid   =   EEikStatusPaneUidTitle;

CEikStatusPane*   statusPane   =   StatusPane();
CEikStatusPaneBase::TPaneCapabilities   subPane   =   statusPane-> PaneCapabilities(titlePaneUid);
if(subPane.IsPresent()   &&   subPane.IsAppOwned())
{
CAknTitlePane*   titlePane   =   (CAknTitlePane*)statusPane-> ControlL(titlePaneUid);
HBufC*   titleText   =   StringLoader::LoadLC(R_NEW_TITLE_TEXT);
titlePane-> SetTextL(*titleText);
CleanupStack::PopAndDestroy(titleText);

}

if之前的代码是什么意思呢?
最后为什么要把titleText进出栈并销毁呢   在什么场合才使用CleanupStack::PopAndDestroy
谢谢

[解决办法]
lz应该多看看API文档:
TBool CEikStatusPaneBase::TPaneCapabilities::IsInCurrentLayout ( ) const [inline]

Tests if this pane is part of the current status pane layout.


Returns:
ETrue if pane is part of the current status pane layout.
**********************
TBool CEikStatusPaneBase::TPaneCapabilities::IsAppOwned ( ) const [inline]

Tests whether the pane is owned by the application or the server.

Applications can only interact directly with application owned subpanes.


Returns:
ETrue if the subpane is owned by the application.
******************************************************
HBufC* titleText = StringLoader::LoadLC(R_NEW_TITLE_TEXT);
titleText 是一个指向在heap上分配的空间,LoadLC方法已经将其压入栈中,并可能会失败。
如果LoadLC方法失败,需要对该空间进行释放,所以才会引入CleanupStack的概念。
推荐LZ看一本书:《SYMBIAN OS软件开发开发--应用C++开发智能手机应用程序入门 》从基本的讲起,基础知识很重要。

saltedfish



[解决办法]
楼上说得对,lz确实应该先看看基础知识
if之前的就是创建pane的对象,通过Uid来获取程序的pane

还有楼主要注意函数的命名方式,所有带L的表示该函数可能会失败,所有带C的表示该对象已压入栈中,所以用完之后要pop,又因为是局部变量,所以用完后要delete,不然会产生内存泄漏,于是就有CleanupStack::PopAndDestroy(titleText);

热点排行