为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

symbian百宝箱

2010-11-13 29页 doc 353KB 33阅读

用户头像

is_456424

暂无简介

举报
symbian百宝箱SYMBIAN_CAPY SYMBIAN_CAPY 目录 TOC \o "1-3" \h \z \u 1.子签名证书生成命令: 4 2.自签名: 4 3.架构转换 4 3.1删除 *AppView类信息 4 3.2修改视图结构 4 3.3添加新视图信息 4 4. 使用TBuf读取资源 5 5. 使用HBufC读取资源,并用HBufC的指针传进TDesC的形参,弹出对话框 5 6. 选择VIEW的ID 5 7. 析构的宏定义 5 8. 修改视图图标及标题 5 9. 获得MBM文件路径 6 10.加载位图(在*container....
symbian百宝箱
SYMBIAN_CAPY SYMBIAN_CAPY 目录 TOC \o "1-3" \h \z \u 1.子签名证书生成命令: 4 2.自签名: 4 3.架构转换 4 3.1删除 *AppView类信息 4 3.2修改视图结构 4 3.3添加新视图信息 4 4. 使用TBuf读取资源 5 5. 使用HBufC读取资源,并用HBufC的指针传进TDesC的形参,弹出对话框 5 6. 选择VIEW的ID 5 7. 析构的宏定义 5 8. 修改视图图标及标题 5 9. 获得MBM文件路径 6 10.加载位图(在*container.cpp的Draw()中) 7 11. 添加视图资源,cba 菜单栏 7 12. 菜单的显示和隐藏 8 13. 修改为系统的皮肤(在*ui.cpp中的ConstructL()函数中) 9 14. 动态创建Label 9 15. How to Change CEikLabel Color 10 16. 动态创建Editor 10 17. 动态创建listbox 11 18.添加和删除listbox数据 12 19.动态创建Grid 13 19.1动态创建Grid(Part1) 13 19.2动态创建Grid(Part2) 13 19.3动态创建Grid(Part3) 14 20.九宫格的制作 17 21.自定义控件实现文本滚动 18 21.1 创建自定义控件类 18 21.2 函数实现 18 21.3自定义控件的使用 20 22.TXT文件操作 20 23.流文件操作 21 24.全屏设置(4中方法)seting wholescreen 23 25.进度和等待通知 24 26.永久通知 25 27.S60开机自启动 25 28.打开一个已存在的S60 2rd的工程步骤 26 29.通知 26 30.在*container类里面获取*appui的指针 27 31. 设置view的背景颜色 27 32. 设置默认显示的view函数 27 33.多个view的继承图 28 34. Series 60 2nd/3rd隐藏应用程序图标 28 1.子签名证书生成命令: makekeys -cert -len 2048 -dname "CN=Joe Bloggs OU=Development OR=Acme Ltd CO=GB EM=noone@nowhere.com" mykey.key mycert.cer 2.自签名: signsis LDO03.sis LDO03.sisx mycert.cer mykey.key 3.架构转换 3.1删除 *AppView类信息 (1)删除*Appui.h中该类相关信息(inc文件夹中); (2)删除*Appui.cpp中该类相关信息(src文件夹中); (3)删除inc目录中*AppView.h ; (4)删除src目录中*AppView.cpp; (5)更新mmp文件; 3.2修改视图结构 (1)修改*Appui.h中包含的头文件,由aknappui.h修改为aknviewappui.h; (2)修改*Appui.h中的基类由CAknAppUi修改为 CAknViewAppUi ; 3.3添加新视图信息 (1)拷贝两个头文件到inc目录 (2)拷贝两个cpp文件到src目录 (3)在ui.h文件中引入添加的view类 (4)在ui.cpp中添加view的头文件 (5)在ConstructL()函数中创建view ConstructL//为二段构造 { iWorldView = CWorldView::NewL(); AddViewL(iWorldView); } ActivateLocalViewL(TUid::Uid(1)); (6)编译运行 4. 使用TBuf读取资源 包含头文件:#include TBuf<32> sBuf; CEikonEnv::Static()->ReadResource(sBuf,R_QTN_HEWB_SCROLL); iMyLabel->SetTextL(sBuf); 5. 使用HBufC读取资源,并用HBufC的指针传进TDesC的形参,弹出对话框 包含头文件:#include HBufC* textResource = StringLoader::LoadLC( R_HEWB_COMMAND1_TEXT ); CAknInformationNote* informationNote = new ( ELeave ) CAknInformationNote; informationNote->ExecuteLD( *textResource ); CleanupStack::PopAndDestroy( textResource ); 6. 选择VIEW的ID AppUi()->ActivateLocalViewL(TUid::Uid(1)); 7. 析构的宏定义 #define MEMFREE(p) if(p) {delete p; p = NULL;} 8. 修改视图图标及标题 (1)包含的头文件: #include "*.mbg" #include "akncontext.h" #include "akntitle.h" #include "*.rsg" #include "*.hrh" (2)包含的库文件: eikcoctl.lib bscli.lib (3)查找*.mbg文件:在C:\Symbian\9.1\S60_3rd_MR\Epoc32文件夹下搜索*.mbg, 会搜索到*.mbg文件,打开,就得到枚举数据。 (4)在*View.cpp的DoActivateL()中加载如下代码: (1)//Modify icon of view 修改图标 ①获取状态面板指针 CEikStatusPane* statusPane = StatusPane(); CAknContextPane* contextPane = (CAknContextPane*)statusPane->ControlL(TUid::Uid(EEikStatusPaneUidContext)); _LIT(KMbmpath,"z:\\resource\\apps\\*.mbm"); ②装载图片 CFbsBitmap* pSrcBmp = new (ELeave) CFbsBitmap(); pSrcBmp->Load(KMbmpath, EMbmLdo03Ld_lh_44x44_apple_icon); CFbsBitmap* pMskBmp = new (ELeave) CFbsBitmap(); pMskBmp->Load(KMbmpath, EMbmLdo03 Ld _lh_44x44_apple_icon_mask_soft); contextPane->SetPicture(pMskBmp, pSrcBmp); (2)//Modify title of view 修改标题 CAknTitlePane* titlePane = (CAknTitlePane*) statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle)); TBuf<32> sTmpTitle; CEikonEnv::Static()->ReadResource(sTmpTitle,R_QTN_LDM03_LH_PRCOESS_TITLE); titlePane->SetTextL(sTmpTitle); 9. 获得MBM文件路径 (1)在*AppUi.h中定义一个得到路径的函数; void GetPathL(TDes& aPath); (2)在*AppUi.cpp中实现该函数; void *AppUi::GetPathL(TDes& aPath) { TFileName appFullName; appFullName = Application()->AppFullName(); TParsePtr parse(appFullName); aPath.Copy(parse.DriveAndPath().Mid(0,2)); aPath.Append(_L("\\resource\\apps\\")); } (3)在其它函数中使用; TBuf sPath; #ifdef __WINS__ sPath.Copy(_L("z:\\resource\\apps\\*.mbm")); #else ?AppUi* pAppUi = (?AppUi*) CCoeEnv::Static()->AppUi();; pAppUi->GetPathL(sPath); sPath.Append(_L("*.mbm")); #endif 10.加载位图(在*container.cpp的Draw()中) (1)包含的头文件: #include #include <*.mbg> 包含的库文件: fbscli.lib (2)加载图片: _LIT(KFilePath, "z:\\resource\\apps\\LDI03.mbm"); CFbsBitmap* pBmp = new(ELeave) CFbsBitmap; pBmp->Load(KFilePath, EMbmLdi03Bg_flower_192x133); //gc.BitBlt(TPoint(0,0), pBmp); gc.DrawBitmap(TRect(TPoint(0,0),TPoint(352,416)), pBmp); pBmp->Reset(); gc.BitBlt(TPoint(0,100), pBmp); delete pBmp; 11. 添加视图资源,cba 菜单栏 (1)在*.rss文件中加载下面的代码; RESOURCE AVKON_VIEW r_help_view { cba = r_help_cba; menubar = r_help_menubar; } RESOURCE CBA r_help_cba { buttons= { AVKON_CBA_BUTTON { id = EAknSoftkeyOptions; txt = qtn_hewb_cba_option; //选项 }, AVKON_CBA_BUTTON { id = EAknSoftkeyExit; txt = qtn_hewb_cba_exit; //退出 } }; } RESOURCE MENU_BAR r_help_menubar { titles = { MENU_TITLE { menu_pane = r_help_menupane; } }; } RESOURCE MENU_PANE r_help_menupane { items = { MENU_ITEM { command = EMenuHelpTextInput; txt = qtn_hewb_textinput; }, MENU_ITEM { command = EMenuHelpHelp; txt = qtn_hewb_help; } }; } (2)进行关联; 需在对应的View中的ConstructL()函数中的BaseConstructL()进行添加操作,以进行对View的关联BaseConstructL(R_HELP_VIEW); (3)在对应的View中的HandleCommandL()中进行菜单处理操作(注:在*.hrh中定义枚举变量); void CLdl03LoginView::HandleCommandL(TInt aCommand) { switch ( aCommand ) { case ELogin: AppUi()->ActivateLocalViewL(TUid::Uid(0)); break; case ERegister: AppUi()->ActivateLocalViewL(TUid::Uid(1)); break; case ELoginHelp: break; default: AppUi()->HandleCommandL(aCommand); break; } } 12. 菜单的显示和隐藏 (1)函数声明(在*View.h中); //动态处理菜单项 void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane); (2)函数实现(在*View.cpp中); 包含头文件:#include void CMenuView::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) { if(aResourceId != R_MENU_MENUPANE) return; aMenuPane->SetItemDimmed(EMenuRock, EFalse); aMenuPane->SetItemDimmed(EMenuBuck, ETrue); aMenuPane->SetItemDimmed(EMenuLaker,ETrue); } 13. 修改为系统的皮肤(在*ui.cpp中的ConstructL()函数中) BaseConstructL(EAknEnableSkin); 14. 动态创建Label (1)包含头文件: #include #include <*.rsg> 包含库文件: eikcoctl.lib (2)定义Label的指针变量(在*Container.h中); 声明:class CEikLabel; 定义:CEikLabel* iPhoneNumLabel; (3)指针的初始化、清除; (4)在*Container.cpp的ConstructL()中创建label; //动态创建Label iPhoneNumLabel = new(ELeave) CEikLabel; iPhoneNumLabel->SetContainerWindowL(*this); //导入中文资源 TBuf<32> sPhoneNumLabel; CEikonEnv::Static()->ReadResource(sPhoneNumLabel, R_SEDIT_PHONENUM_LABEL); //设置Label显示内容 iPhoneNumLabel->SetTextL(sPhoneNumLabel); iPhoneNumLabel->SetExtent(TPoint(20,70), iPhoneNumLabel->MinimumSize()); (5)控件个数加1,在CountComponentControls() (6)添加控件指针,在ComponentControl() 15. How to Change CEikLabel Color (1)包含头文件 #include (2)实现代码 //Here iLabel is a class member of type CEikLabel* iLabel= new (ELeave) CEikLabel; iLabel->SetContainerWindowL( *this ); iLabel->SetTextL( _L("Some Text") ); // Using blue as foreground color iLabel->OverrideColorL( EColorLabelText, KRgbBlue ); // Set red as background color iLabel->OverrideColorL(EColorControlBackground, KRgbRed ) 16. 动态创建Editor (1)包含头文件: #include #include <*.rsg> 包含库文件: eikcoctl.lib (2)定义Editor的指针变量(在*container.h中); 声明:class CEikEdwin; 定义:CEikEdwin* iPhoneNumEdit; (3)指针的初始化、清除; (4)在*Container.cpp的ConstructL()中创建Editor; //动态创建Editor iPhoneNumEdit = new(ELeave) CEikEdwin; iPhoneNumEdit->SetContainerWindowL(*this); iPhoneNumEdit->ConstructL(EAknEditorFlagDefault, 10, 11, 1); //设置editor显示位置、大小 iPhoneNumEdit->SetExtent(TPoint(20+ iPhoneNumLabel ->Size().iWidth,70), iPhoneNumLabel ->MinimumSize()); //设置当前输入模式 iPhoneNumEdit->SetAknEditorCurrentInputMode(EAknEditorNumericInputMode); //设置焦点 //注意当前只能有一个编辑框拥有焦点 iPhoneNumEdit->SetFocus(EFalse); (5)控件个数加1,在CountComponentControls(); (6)添加控件指针,在ComponentControl(); (7)按键处理(在OfferKeyEventL()中处理); if (iUserNameEdit) { if (iUserNameEdit->IsFocused()) { if((aType == EEventKey) && (aKeyEvent.iCode == EKeyDownArrow)) { iUserNameEdit->SetFocus(EFalse); iUserPasswordEdit->SetFocus(ETrue); iUserEnsurePasswordEdit->SetFocus(EFalse); return EKeyWasConsumed; } else if((aType == EEventKey) && (aKeyEvent.iCode == EKeyUpArrow)) { iUserNameEdit->SetFocus(EFalse); iUserPasswordEdit->SetFocus(EFalse); iUserEnsurePasswordEdit->SetFocus(ETrue); return EKeyWasConsumed; } return iUserNameEdit->OfferKeyEventL(aKeyEvent, aType); } } 17. 动态创建listbox (1)包含头文件: #include #include <*.rsg> 包含库文件: eikcoctl.lib (2)定义Listbox的指针变量(在*Container.h中); 声明:class CAknSingleNumberStyleListBox; 定义:CAknSingleNumberStyleListBox* iSingleList; (3)指针的初始化、清除(在*Container.cpp中); (4)在*Container.cpp的ConstructL()中创建listbox; //动态创建listbox iSingleList = new( ELeave ) CAknSingleNumberStyleListBox; iSingleList->SetContainerWindowL( *this ); iSingleList->ConstructL( this, EAknListBoxSelectionList); //设置滚动条 iSingleList ->CreateScrollBarFrameL(ETrue); iSingleList ->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); //创建列表项数组 iListBoxItems = new (ELeave) CDesCArrayFlat(10); CTextListBoxModel* model1 = iSingleList ->Model(); model1->SetItemTextArray(iListBoxItems); model1->SetOwnershipType(ELbmOwnsItemArray); (5)在CountComponentControls()中将控件个数加1; (6)在ComponentControl()中返回控件指针; (7)实现SizeChanged()函数; if (iSingleList) { iSingleList->SetExtent (TPoint(0,0),Rect().Size()); } (8)处理按键(在OfferKeyEventL()中处理); 18.添加和删除listbox数据 (1)函数声明: void AddInfoToList(TInt aNumber,const TDesC& aContent); void DelInfoFromList(); (2)函数实现: void CSimplelistContainer::AddInfoToList(TInt aNumber,const TDesC& aContent) { TBuf<32> sBuf; sBuf.AppendNum(aNumber); sBuf.Append(_L("\t")); sBuf.Append(aContent); iListBoxItems->AppendL(sBuf); //listbox添加数据 iSingleList->HandleItemAdditionL(); } void CSimplelistContainer::DelInfoFromList() { TInt currentIndex = iSingleList->CurrentItemIndex(); if (currentIndex == -1) return; iListBoxItems->Delete(currentIndex); AknListBoxUtils::HandleItemRemovalAndPositionHighlightL(iSingleList,currentIndex,ETrue); } (3)函数调用:(在*view.cpp中调用) void CSimplelistView::HandleCommandL(TInt aCommand) { switch(aCommand) { case ESimpleListAdd: { TInt num; for (num = 0;num<5;num++) { iContainer->AddInfoToList(num,_L("single list content")); } } break; case ESimpleListDel: iContainer->DelInfoFromList(); break; default: AppUi()->HandleCommandL(aCommand); } } 19.动态创建Grid 19.1动态创建Grid(Part1) (1)定义Grid指针变量(在*Container.h中); 声明:class CAknGrid; 定义:CAknGrid* iGrid; (2)指针初始化、清除(在*Container.cpp中); (3)创建Grid(在*Container.cpp的ContructL()中) 包含头文件:#include 包含库文件: eikcoctl.lib //在ConstructL()中创建Grid iGrid = new( ELeave ) CAknGrid; //创建一个Grid控制器实例/对象 iGrid->SetContainerWindowL( *this ); iGrid->ConstructL( this, EAknListBoxSelectionGrid ); //第二阶段构造 iGrid->SetEmptyGridTextL(_L("empty")); //设置Grid默认文本:当Grid的Text未设置时,显示默认字符串 iGrid->SetRect(aRect.Size()); //设置Grid的矩形显示区域 (4)控件个数加1,在CountComponentControls(); (5)添加控件指针,在ComponentControl(); (6)按键处理(在OfferKeyEventL()中处理); 19.2动态创建Grid(Part2) (1)声明Grid参数 ​ 在*Container.h中,包含头文件:#include ​ 声明Grid参数: TBool iVerticalOrientation; TBool iLeftToRight; TBool iTopToBottom; TInt iNumOfColumns; TInt iNumOfRows; TInt iNumOfItems; TSize iSizeOfItems; CAknGridView::TScrollingType iVerticalScrollingType; CAknGridView::TScrollingType iHorizontalScrollingType; (2)参数赋值 // 设置网格初始化数据 iVerticalOrientation = EFalse; //排列方向:垂直方向为假,则是水平方向 iTopToBottom = ETrue; //排列方式:从上倒下为真 iLeftToRight = ETrue; //排列顺序:从左到有为真 iNumOfColumns = 3; //列数 iNumOfRows = 3; //行数 iNumOfItems = 9; //项的总个数 //the ordering of the data. iVerticalScrollingType = CAknGridView::EScrollIncrementLineAndLoops; iHorizontalScrollingType = CAknGridView::EScrollIncrementLineAndLoops; iSizeOfItems.iWidth = ( aRect.iBr.iX - aRect.iTl.iX ) / iNumOfColumns; iSizeOfItems.iHeight = ( aRect.iBr.iY - aRect.iTl.iY ) / iNumOfRows; (3)设置网格布局 //设置网格布局 iGrid->SetLayoutL ( iVerticalOrientation, //填充网格项时的方向,ETrue表示列序,EFalse表示行序 iLeftToRight, //填充网格项时的方向,ETrue表示自顶向下,EFalse表示自底向上 iTopToBottom, //填充网格项时的方向,ETrue表示自左向右,EFalse表示自右向左 iNumOfColumns, //网格的列数 iNumOfRows, //网格的行数 iSizeOfItems //网格的大小 ); //设置主方向轴上的滚动行为——当焦点水平移动到最右边时,是否自动移动到最左边 iGrid->SetPrimaryScrollingType( iHorizontalScrollingType ); //设置次方向轴上的滚动行为——当焦点垂直移动到最下方时,是否自动移动到最上边 iGrid->SetSecondaryScrollingType( iVerticalScrollingType ); 19.3动态创建Grid(Part3) (1)加载图片 在*AppUi.h中,声明函数 代码: //动态获取路径 void GetPath(TDes& aPath); //加载图片 CGulIcon* LoadGraphicsL(TInt aType); GetDrive()函数实现 代码: void CLDCI3rdAppUi::GetPath(TDes& aPath) { TFileName appFullName; appFullName = Application()->AppFullName(); TParsePtr parse(appFullName); aPath.Copy(parse.DriveAndPath().Mid(0,2)); aPath.Append(_L("\\resource\\apps\\")); } LoadGraphicsL()函数实现 CGulIcon* CLDCI3rdAppUi::LoadGraphicsL(TInt aType) { _TBuf pathMbm; GetPath(pathMbm); pathAppMbm.Append(_L("LDCI3rd.mbm")); //添加自己工程的mbm文件 switch(aType) { case 0: return iEikonEnv->CreateIconL(mbmfilename, EMbmLdci3rdGrid1_48x48, EMbmLdci3rdGrid1_48x48_m);//放自己mbg文件的索引 case 1: returniEikonEnv->CreateIconL(mbmfilename,EMbmLdci3rdGrid2_48x48,EMbmLdci3rdGrid2_48x48_m); default: return NULL; } } (2)函数声明 在GridContainer.h中 代码: void LoadGraphicsL(); //导入图片 void AddDataL(); //添加数据 void ApplySelGridGraphicStyleL(); //设置风格 (3)函数实现 在GridContainer.cpp中 LoadGraphicsL()的实现 代码: //添加图片 void CGridContainer::LoadGraphicsL() { CLDCI3rdAppUi* pApp = (CLDCI3rdAppUi*)CEikonEnv::Static()->AppUi(); //获取自己工程的UI的指针 CArrayPtr< CGulIcon >* icons = new(ELeave) CAknIconArray(iNumOfItems); CleanupStack::PushL( icons ); icons->AppendL(pApp->LoadGraphicsL(0)); icons->AppendL(pApp->LoadGraphicsL(1)); …… // 设置图片数组 iGrid->ItemDrawer()->FormattedCellData()->SetIconArrayL( icons ); CleanupStack::Pop(); // icons array } AddDataL()的实现 代码: void CGridContainer::AddDataL() { MDesCArray* array = iGrid->Model()->ItemTextArray(); //获取模型对象 CDesCArray* cArray = ( CDesCArray* )array; //获取描述符数组 TBuf<32> sBuf; //a sBuf.Copy(_L("0\t")); sBuf.Append(_L("notes")); cArray->AppendL(sBuf); //b sBuf.Copy(_L("1\t")); sBuf.Append(_L("friends")); cArray->AppendL(sBuf); …… //为网格添加数据 iGrid->HandleItemAdditionL(); } AddDataL()的实现 代码: void CGridContainer::ApplySelGridGraphicStyleL() { if (!iGrid) { return; } //设置网格默认的前景色和背景色 AknListBoxLayouts::SetupStandardGrid( *iGrid ); //获取中文字体 const CFont* fontText = ApacPlain12(); //或者const CFont* fontText = LatinBold12() TInt nX = (iGrid->ColumnWidth() - KGraphicsHeight) / 2; TInt nY = (iGrid->ItemHeight() - KGraphicsHeight - fontText->HeightInPixels()) / 2; //设置图标的布局 AknListBoxLayouts::SetupFormGfxCell( *iGrid, iGrid->ItemDrawer(), 0, //图标在网格项串中的位置,表示第一项 nX, //左边位置 nY, //右边位置 0, //该参数无效 0, //该参数无效 KGraphicsHeight, //图标宽度 KGraphicsHeight, //图标高度 TPoint( nX, nY ), //图标左顶点的相对坐标 TPoint( KGraphicsHeight+nX, KGraphicsHeight+nY) );//图标右底点的相对坐标 //设置文本的布局 AknListBoxLayouts::SetupFormAntiFlickerTextCell( *iGrid, iGrid->ItemDrawer(), 1, //文本在网格项格式串中的位置 fontText, //字体 215, //文本颜色(是系统调色板中黑色对应的索引值) 0, //左边空白 0, //该参数无效 KGraphicsHeight+nY+fontText->HeightInPixels(), //基线 iGrid->ColumnWidth(), //文本的宽度 CGraphicsContext::ECenter, //文本对齐方式,居中 TPoint( 0, KGraphicsHeight+nY), //文本左顶点的相对坐标 TPoint( iGrid->ColumnWidth(), iGrid->ItemHeight()) ); //文本右底点的相对坐标 DrawNow(); } 20.九宫格的制作 (1)创建自定义控件类;MyGrid (2)对创建类的函数实现; (3)定义MyGrid指针变量(在*Container.h中); 声明:class CMyGrid; 定义:CMyGrid * iMyGrid; (4)指针初始化、清除(在*Container.cpp中); (5)创建Grid(在*Container.cpp的ContructL()中) 包含头文件:#include 包含库文件: eikcoctl.lib //在ConstructL()中创建Grid iMyGrid = new(ELeave) CMyGrid; iMyGrid->SetContainerWindowL(*this); iMyGrid->ConstructL(); _LIT(KMbmPath, "z:\\resource\\apps\\ninepalace.mbm"); CFbsBitmap* pBmp1 = new(ELeave) CFbsBitmap; pBmp1->Load(KMbmPath,EMbmNinepalace_lh_44x44_windows_icon); CFbsBitmap* pBmp2 = new(ELeave) CFbsBitmap; pBmp2->Load(KMbmPath,EMbmNinepalace_lh_44x44_windows_icon_mask_soft); iMyGrid->SetSrcSelectImage(pBmp1, pBmp2); iMyGrid->SetRowAndColumn(3, 3); iMyGrid->SetExtent(TPoint(0,0), aRect.Size()); iMyGrid->SetFocus(ETrue); (6)控件个数加1,在CountComponentControls(); (7)添加控件指针,在ComponentControl(); (8)按键处理(在OfferKeyEventL()中处理); if(iMyGrid) { iMyGrid->OfferKeyEventL(aKeyEvent, aType); } 21.自定义控件实现文本滚动 21.1 创建自定义控件类 (1)继承于CEikLabel (2)包含头文件 #include #include (3)定义属性(在*Container.h中) HBufC* iText; //保存要显示的文本 TInt iStarIndex; CPeriodic* iPeriodicTimer; //定时器 TRgb iBackgroundColor; //背景颜色 (4)定义方法(在*Container.h中) void Draw(const TRect& aRect) const; //重写绘图函数 void SetTextL(const TDesC& aText); //重写CEikLabel的文本设置函数 void Start(); //启动滚动 void SetBackgroundColor(TRgb aColor); //设置背景颜色函数 static TInt Tick(TAny* p); //定时器回调函数 void DoScroll(); //滚动文本 TBool IsNeedScroll(); //判断滚动是否完成 21.2 函数实现 (1)Draw() CWindowGc& gc = SystemGc(); gc.SetPenStyle( CGraphicsContext::ENullPen ); gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); gc.SetBrushColor( iBackgroundColor); gc.DrawRect( aRect ); gc.SetBrushStyle( CGraphicsContext::ENullBrush ); CEikLabel::Draw(aRect); (2)SetTextL() if(iText) delete iText; iText = aText.AllocL(); iStarIndex=0; CEikLabel::SetTextL(aText); (3)Start() if(iPeriodicTimer==NULL && IsNeedScroll()) { iPeriodicTimer = CPeriodic::NewL(EPriorityNormal); iPeriodicTimer->Start(0,SCROLL_INTERVAL,TCallBack(Tick,this)); } (4)SetBackgroundColor() iBackgroundColor = aColor; (5)Tick() CMyLabel* pThis = (CMyLabel*)p; pThis->DoScroll(); return 0; (6)DoScroll() CEikLabel::SetTextL(iText->Mid(iStarIndex)); //切割 if(IsNeedScroll()) { iStarIndex+=2; if(iStarIndex>=iText->Length()) iStarIndex = iText->Length(); } else { iPeriodicTimer->Cancel(); //重置 delete iPeriodicTimer; iPeriodicTimer = NULL; iStarIndex = 0; CEikLabel::SetTextL(iText->Des()); } DrawDeferred(); (7)IsNeedScroll() if(iText) delete iText; iText = aText.AllocL(); iStarIndex=0; CEikLabel::SetTextL(aText); 21.3自定义控件的使用 在Container.cpp 的ConstructL()中实现下面代码 iMyLabel = new(ELeave)CMyLabel; iMyLabel->SetContainerWindowL(*this); iMyLabel->SetTextL(_L("News: Iran tells Obama: you need to improve your attitude")); iMyLabel->SetBackgroundColor(TRgb(159,203,223)); TSize sz = iMyLabel->MinimumSize(); sz.iWidth = aRect.Width()-20; sz.iHeight += 5; iMyLabel->SetExtent( TPoint(10,10), sz); iMyLabel->Start(); 22.TXT文件操作 (1)包含头文件:#include (2)包含库文件: efsrv.lib (3)函数声明 void WriteFileByTxt(); void ReadFileByTxt(); (4)函数实现 WriteFileByText(): //写文件 RFs fs = iCoeEnv->FsSession(); //CEikonEnv::Static()->FsSession(); RFile file; TInt err = file.Open(fs,_L("c:\\test.log"),EFileWrite); if (err == KErrNotFound) { file.Create(fs,_L("c:\\test.log"),EFileWrite); } if (err != KErrNone) { return; } //文件打开成功,则执行写文件的操作 HBufC8* buf8 = HBufC8::NewL(100); buf8->Des().Copy(_L(“Write file by text”)); file.Write(ptr); file.Close(); if (buf8) { delete buf8; buf8 = NULL; } ReadFileByText(): //读文件 RFs fs = iCoeEnv->FsSession(); RFile file; TInt err = file.Open(fs,_L("c:\\test.log"),EFileRead); if (err != KErrNone) { return; } TInt nlength; //获取文件当前长度 file.Size(nlength); if(nlength <= 0) //判断文件是否为空 { file.Close(); return; } HBufC8* hbuf8 = HBufC8::NewL(nlength); TPtr8 ptr = hbuf8->Des(); //读取文件内容 file.Read(ptr); file.Close(); //使用后关闭 HBufC* hbuf16 = HBufC::NewL(nlength); //转换 hbuf16->Des().Copy(ptr); CAknInformationNote* informationNote = new (ELeave) CAknInformationNote; informationNote->ExecuteLD(hbuf16->Des()); //输出显示 if (hbuf8) { delete hbuf8; hbuf8 = NULL; } if (hbuf16) { delete hbuf16; hbuf16 = NULL; } (5)函数调用 23.流文件操作 (1)包含头文件: #include (2)包含库文件: estor.lib (3)函数声明 void ReadFileByStream(); void WriteFileByStream(); (4)函数实现 @WriteFileByStream() //写文件 RFs fs = iCoeEnv->FsSession(); //CEikonEnv::Static()->FsSession(); fs.Delete(_L("C:\\test.ldci")); //删除文件 RFileWriteStream writeStream; //以写的方式创建流文件 User::LeaveIfError(writeStream.Create(fs,_L("C:\\test.ldci"),EFileWrite)); writeStream.PushL(); //压栈 HBufC* hBuf = HBufC::NewL(128); hBuf->Des().Copy(_L("write file by stream!")); writeStream.WriteInt32L(hBuf->Length()); //写数据长度到流文件 writeStream << hBuf->Des(); //写数据到流文件:外化 if (hBuf) { delete hBuf; hBuf = NULL; } writeStream.CommitL(); //提交、弹栈、释放资源 writeStream.Pop(); writeStream.Release(); @ReadFileByStream(): //读文件 RFs fs = iCoeEnv->FsSession(); RFileReadStream readStream; User::LeaveIfError(readStream.Open(fs,_L("C:\\test.ldci"),EFileRead)); TInt nLength = readStream.ReadInt32L(); if (nLength > 0) { HBufC* hBuf = HBufC::NewL(nLength); TPtr ptr = hBuf->Des(); //读取流数据内容:内化 readStream >> ptr; CAknInformationNote* informationNote = new (ELeave) CAknInformationNote; informationNote->ExecuteLD(ptr); //显示读取到的内容 if (hBuf) { delete hB
/
本文档为【symbian百宝箱】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索