[原创 2009-05-18 20:01:10] 字号:大 中 小 看了几天Symbian开发,感觉真的复杂,还是微软程序员好干。
先说说开发环境吧,需要安装active perl,Java,s60的sdk和ide
网上文章比较多,搜索一下就找了
这个ide的问题,现在比较推荐carbide c++2。0完全免费的,算是eclipse的,完整的ide。还有一个carbide.vs是一个插件,就可以是vs2003,2005来开发,但是好像nokia已经不发展了。还有一个比较新的就是QT creator,网上的文章说这个太厉害了。有质的变化,提供新的完整类库,原来要写100行代码实现的功能,现在10行就搞定了,呵呵,不过只是技术预览版,而且好像还是收费的版本。所以现在还是先使用carbide2.0吧
Symbian使用c++作为开发语言,但是不是纯c++,里面为了适应手机这样的设备,做了很多更改,比如基本的数据类型,还有类的实例化过程,差别很大,慢慢看了。本来c++就不好。
Symbian提供了3中框架开发模式:基于控件的,视图的,和对话框的。
carbide2.0新建项目向导里面,没有说完全对应的框架,但是提供的那个gui application有点像控件框架的,只是使用view累,也不是container类,反正有点晕。还有一个项目模板是gui application with ui desinger这个可以拖拽控件,但是框架更看不懂了。
我推荐还是使用gui application吧,里面有完整的代码可以响应菜单事件,方便添加新的事件
c++都分头文件H和类文件cpp,头文件h只是声明方法和字段,不实现,cpp文件来实现。
添加控件的时候,控件的代码都要添加在view类里面。
InitComponentArrayL();
iLabel = new(ELeave)CEikLabel();
iLabel->SetContainerWindowL(*this);
iLabel->SetTextL(_L("Simple Label"));
iLabel->SetExtent(TPoint(10,10),TSize(150,30));
Components().AppendLC(iLabel);
CleanupStack::Pop(iLabel);
一个小例子。添加label的。
当然这样做是比较麻烦,在control类中添加两个函数,就不需要每次都写组件添加了
声明这两个:
TInt CountComponentControls() const;//返回控件的数量
CCoeControl* ComponentControl(TInt aindex) const;//根据aindex的不同,返回空间的指针。
比如这样:
TInt CHelloLabelAppView::CountComponentControls() const
{
return 2;
}
CCoeControl* CHelloLabelAppView::ComponentControl(TInt aindex) const
{
switch(aindex)
{
case 0:
return iLabel1;
case 1:
return iLabel2;
default:
return NULL;
}
}
还有就是include的问题。一个类如果用过其他类,不如sdk的标准类,就要添加include <.h>文件
如果用到类库还要添加lib文件,就是在group文件下的mmp文件,可以在carbide下有图形界面的添加,也可以直接去文本编辑器里面添加了。很好找到