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);