关于SYMBIAN源码中有段问题,请教大家(求解,在线等待)

hyh1000 2010-10-01 11:59:50
加精
1.-------------------------------------------------------------------------------------------------------------
在这个源码中定义了个MMODEL iCurrentModel和RPointerArray< MModel >iModel,iCurrentModel他是个纯虚类。iModel分别添加了A1,A2,A3。A1到A3都实例化了ActivateL()。不过这里遇到一个问题
iGameModel = CModelGame::NewL( this );
iModel.Append( CModelTitle::NewL( this ) );
iModel.Append( iGameModel );
iModel.Append( CModelHelp::NewL( this ) );

iChangeModel = EFalse;

iCurrentModel = iModel[ EModelTitleScreen ];// EModelTitleScreen?
iCurrentModel->ActivateL();//这个ActivateL()具体是调用那个的了?
iCurrentModel->ActivateL();这个ActivateL()具体调用那个了是3个都调用还是,只调用一个了?

2.-------------------------------------------------------------------------------------------------------------
关于位图,我接触的位图知识使用CompleteWithAppPath(file);Load(file);
在这个源码中为什么使用备份位图了?哪位大哥能帮我介绍下这个备份位图的作用,为什么要使用他了?
CreateBackedUpWindowL( CCoeEnv::Static()->RootWin() );//RootWin();这个函数有什么用了,这个源码中很多地方使用到
BackedUpWindow().MaintainBackup();
TInt wh = BackedUpWindow().BitmapHandle();
SetExtentToWholeScreen();
TInt wh = BackedUpWindow().BitmapHandle();
iBitmap.Duplicate( wh );
3-------------------------------------------------------------------------------------------------------------
case EColor4K:
{
longword = aRgb.Color4K();
//Color4K()获取价值指数最接近TRgb这个基础上,匹配的显示模式。
longword |= longword << 16;//???这段代码什么左右,|=
break;
}

4-------------------------------------------------------------------------------------------------------------
还有这段代码,始终没有理解
for( i=0; i<8; i++ )
{
file.Copy( iSystem->Path() );
file.Append( _L("player.mbm" ) );
CBitmap* bmPlayer = CBitmap::NewL( file, i );
bmPlayer->SetMaskColor( 0 );
iSprPlayer->AddSpriteBmp( bmPlayer );//添加子画面。这里调用void CSprite::AddSpriteBmp
}
void CSprite::AddSpriteBmp( CBitmap* aBitmap )
{
iBitmaps.Append( aBitmap );
}
//这怎么使用循环,那不是重复创建BITMAP?重复执行?player.mbm确实存在,那不是添加了8次,就是8份地图了??
...全文
1805 60 打赏 收藏 转发到动态 举报
写回复
用AI写文章
60 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyh1000 2010-10-16
  • 打赏
  • 举报
回复
//6-2:
void CBitmap::Clear( TRgb aRgb )
{
TInt longwords = iSize.iWidth * iSize.iHeight / 2;
TUint32 longword = 0;

switch( iMode )
{
case EColor4K://4096显示模式
{
longword = aRgb.Color4K();
//Color4K()获取这一指数最接近的TRgb价值的基础上,匹配的显示模式
longword |= longword << 16;
break;
}
case EColor64K:
{
longword = aRgb.Color64K();
longword |= longword << 16;
break;
}
default:
{
longword = aRgb.Color16M();
longwords *= 2;
break;
}
}
//这上面可以理解为选择显示匹配模式,
TUint32* p = (TUint32*)iData;
TInt i;
for( i=0; i<longwords; i++ )
{
*p++ = longword;
}//但是这个循环不知道有什么用????
}
//7-2在这里的EStdKeyDevice1代表是啥,不明白,具体是要在S60中重新设定,还是已经设定好了?
void CExample2DContainer::InitPhone()
{
iExitKey = EStdKeyDevice1;
//EStdKeyDevice1设备特定的扫描码 - 通常代表一个在手机上额外的硬件的关键。
iSelectKey = EStdKeyDevice0;
iOkKey = EStdKeyDevice3;
iBackKey = EStdKeyDevice1;
}//重新设定按键
hyh1000 2010-10-16
  • 打赏
  • 举报
回复
void CExample2DContainer::ConstructL( const TRect& /*aRect*/ )
{
ControlEnv()->AddForegroundObserverL( *this );
//1:指定前台观察者名单???这个不明不白有什么用?
CreateBackedUpWindowL( CCoeEnv::Static()->RootWin() );
//2.创建一个备份的窗口
BackedUpWindow().MaintainBackup();
//3.获取备份窗口的控制权
SetExtentToWholeScreen();
//4.设置控制的程度,整个屏幕
TInt wh = BackedUpWindow().BitmapHandle();
//5.获取位图的句柄
iBitmap.Duplicate( wh );
//负责一个位图
#if defined(__WINS__) //?__wins__什么意思???
iBitmap.LockHeap();//锁定位图堆
#endif

// create TBitmap mirror of iBitmap
TRAPD(err, iBmScreen = CBitmap::NewL( (TUint16*)iBitmap.DataAddress(),
iBitmap.SizeInPixels(), iBitmap.DisplayMode() ));
//DataAddress()获取位图中第一个像素的地址,第一个像素是在左上角

#if defined(__WINS__)
iBitmap.UnlockHeap();//取消锁定
#endif

User::LeaveIfError(err);

iBmScreen->Clear( TRgb( 0,0,0 ) );//6-1:
TSize s = iBmScreen->Size();
InitPhone();
//7-1:
iPos = CCoeEnv::Static()->RootWin().FullOrdinalPosition();
//这句FullOrdinalPosition();没有理解作用获取窗口的完整序列状态?????????
RFs fs;
User::LeaveIfError(fs.Connect());
fs.PrivatePath(iPath);
#ifndef __WINS__
TFileName appFullName = CEikonEnv::Static()->EikAppUi()->Application()->AppFullName();
TParse parse;
parse.Set( appFullName, NULL, NULL);
iPath.Insert(0, parse.Drive());
#endif
fs.Close();
ActivateL();

// Open MsvSession to get SMS notifications
iMsvSession = CMsvSession::OpenAsyncL(*this);

iForeGround = ETrue;

iGameModel = CModelGame::NewL( this );
iModel.Append( CModelTitle::NewL( this ) );
iModel.Append( iGameModel );
iModel.Append( CModelHelp::NewL( this ) );

iChangeModel = EFalse;

iCurrentModel = iModel[ EModelTitleScreen ];
iCurrentModel->ActivateL();

iTiming = CTiming::NewL( this );

LoadMusic();
}

hyh1000 2010-10-15
  • 打赏
  • 举报
回复
朋友们,对不起,这些天没有来,最近我的硬盘坏了,可能不走运,哈哈,可能也是走运,一直使用原来40G硬盘终于要换了,不过,里面的数据丢失了,我的代码,我的AV,哈哈。
说回正题,装了系统,和CARBIDE后我发现S60的S60 5TH SDK中很多函数找不到,原来我使用的S60 3TH SDK,里面的函数都可以查的到,看来又的重新安装。奇怪,所以这段时间分析速度没有跟上来,不过也发现很多问题比如有些操作符 !=这是不等于,但是“=!”这又是什么操作符了?那个位图备份,到底是什么意思,用来干什么,还是没有理解。这16进制有什么用了?不过看来这个原码在这两天可以初步可以分析出来,到时候,看来会出现很多,原来没有知道的东西,
za1234567890123 2010-10-13
  • 打赏
  • 举报
回复
恩 好 好 不错!
yakun90910 2010-10-12
  • 打赏
  • 举报
回复
qwejkrf;elgrda
deicide930 2010-10-12
  • 打赏
  • 举报
回复
学习学习
phpmysql2yue 2010-10-12
  • 打赏
  • 举报
回复
对了,那些16进制数可能是xyz坐标的数值,代表一个点。
最后,Symbian的手机马上就全部停产了,有时间不如去做android~iphone一类的。当然,自己玩玩什么的都没关系
phpmysql2yue 2010-10-12
  • 打赏
  • 举报
回复
0x
表示16进制数啊~~~
dingrunzhi 2010-10-12
  • 打赏
  • 举报
回复
学不会怎么办
paul250670 2010-10-11
  • 打赏
  • 举报
回复
学习了
YUANXUWEI2010 2010-10-11
  • 打赏
  • 举报
回复
看不懂哦~!
cnxmwq 2010-10-11
  • 打赏
  • 举报
回复
学习下
xaut478 2010-10-11
  • 打赏
  • 举报
回复
一点都看不懂
dengjingrs 2010-10-10
  • 打赏
  • 举报
回复
还不错啊 支持一下
dyw 2010-10-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hyh1000 的回复:]

TO:dyw 谢谢 你的解答.
不过对于:4. 建议阅读CBitmap::NewL的实现代码。猜测:player.mbm中至少有8张图,依次读入,可能是用于播放动画
实质是:player.mbm只是一个文件,不知道是不是这样理解你的意思,就是说一个文件中存在8张地图?
[/Quote]
mbm可以包含多张位图,可以用mbmviewer工具打开查看。这个工具也随sdk附带。
panga2010 2010-10-09
  • 打赏
  • 举报
回复
这是不错啊。努力努力
wege86 2010-10-09
  • 打赏
  • 举报
回复
好 不过我都是 是没是啊飞飞
sq172720220 2010-10-09
  • 打赏
  • 举报
回复
有没有大侠指点的啊
学习下
huaiyuan000 2010-10-09
  • 打赏
  • 举报
回复
掌学习了
tyler_jia 2010-10-09
  • 打赏
  • 举报
回复
这个看不懂,只是路过。兄弟加油!
加载更多回复(19)

3,120

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧