再把这个Browser Control API也总结一下吧,只是做个引导,其实要掌握它的用法最好的方法是打开 9.1\S60_3rd\S60Ex\BrCtlSampleApp 这个例子来阅读,它几乎涵盖了这个API的所有使用方法。
而我在UniNews中只使用了它最基本的用法,下面给出代码:
首先,在H文件中声明一个控件成员:
#include<coecntrl.h>
#include<brctlinterface.h>
#include<brctldefs.h>
#include<brctllayoutobserver.h>
#include<brctllinkresolver.h>
classCUniNewsWebContainer:publicCCoeControl,MCoeControlObserver,MBrCtlLoadEventObserver...{
public:
//Constructorsanddestructor
~CUniNewsWebContainer();
staticCUniNewsWebContainer*NewL(constTRect&aRect);
staticCUniNewsWebContainer*NewLC(constTRect&aRect);
private:
//Newfunctions
voidConstructL(constTRect&aRect);
CUniNewsWebContainer();
public:
//Functionsfrombaseclasses
TKeyResponseOfferKeyEventL(constTKeyEvent&aKeyEvent,TEventCodeaType);
voidHandleBrowserLoadEventL(TBrCtlDefs::TBrCtlLoadEventaLoadEvent,TUintaSize,TUint16aTransactionId);
voidLoadContentL(TIntid);
private:
//Functionsfrombaseclasses
voidSizeChanged();
TIntCountComponentControls()const;
CCoeControl*ComponentControl(TIntaIndex)const;
voidDraw(constTRect&aRect)const;
voidHandleControlEventL(CCoeControl*aControl,TCoeEventaEventType);
HBufC8*ReadFileLC(constTDesC&aFileName);
private:
//data
CBrCtlInterface*iBrowser;
TUintiCapabilities;
TIntiCommandBase;
};
主要声明了三个成员,其中CBrCtlInterface是主要的browser控件,其它两个是构造时的所需要的参数。而这个类派生于接口MBrCtlLoadEventObserver,所以实现它的方法void HandleBrowserLoadEventL(TBrCtlDefs::TBrCtlLoadEvent aLoadEvent,TUint aSize,TUint16 aTransactionId);
在实现文件CPP中,我们需要构造它:
voidCUniNewsWebContainer::ConstructL(constTRect&aRect)...{
//Createawindowforthisapplicationview
CreateWindowL();
SetRect(aRect);
//addyourcodehere...
iBrowser=CreateBrowserControlL(this
,aRect
,iCapabilities
,iCommandBase
,NULL//softkeyobserver
,NULL//linkresolver
,NULL//specialloadobserver
,NULL//layoutobserver
,NULL//dialogprovider
);
iBrowser->ActivateL();
if(iBrowser)...{
iBrowser->AddLoadEventObserverL(this);
iBrowser->SetBrowserSettingL(TBrCtlDefs::ESettingsFontSize,TBrCtlDefs::EFontSizeLevelNormal);
}
ActivateL();
}
在构造函数中我们初始化那两个参数:
CUniNewsWebContainer::CUniNewsWebContainer()...{
//Noimplementationrequired
iCapabilities=TBrCtlDefs::ECapabilityDisplayScrollBar|TBrCtlDefs::ECapabilityLoadHttpFw;
iCommandBase=TBrCtlDefs::ECommandIdBase;
iBrowser=NULL;
}
删除的时候记得将它的事件监听器都注销掉:
CUniNewsWebContainer::~CUniNewsWebContainer()...{
//Noimplementationrequired
if(iBrowser)...{
iBrowser->RemoveLoadEventObserver(this);
}
deleteiBrowser;
iBrowser=NULL;
}
此外,它跟其它控件一样,在Resize时要处理一下,并且它也需要声明自己是一个组件等等的。
而方法HandleBrowserLoadEventL只需要简单地重绘一下即可。
真正的使用在这儿呢,很简单:
voidCUniNewsWebContainer::LoadContentL(TIntid)
...{
if(iBrowser)...{
TFileNamefname;
fname.Format(KContentFile,id);
iBrowser->LoadUrlL(fname);
}
}
就是一句话 LoadUrlL就可以了,这个URL可以是http:// 也可以是 file://,很方便。
不过经常我们是需要将内存里的内容加载显示出来,那就稍稍多做一点工作:
voidCUniNewsWebContainer::LoadContentL(TIntid)
...{
if(iBrowser)...{
TFileNamefname;
fname.Format(KContentFile,id);
HBufC8*buf=ReadFileLC(fname);
_LIT(KURL,"data:%d");
TBuf<32>url;
url.Format(KURL,id);
_LIT8(KDataType,"text/html");
TDataTypedataType(KDataType());
TUiduid;
uid.iUid=KCharacterSetIdentifierUtf8;
iBrowser->LoadDataL(url,*buf,dataType,uid);
CleanupStack::PopAndDestroy();
}
}
这里的URL用data:// 开头主要是用于历史记录作个标签罢了。而内容格式是text/html,不过要换成TDataType类型。而字符集使用UTF8。
我试了一下,觉得加载到内存再显示的效果比直接加载文件要快(主要是指切换页面时)。
另外,这个控件有个BUG,在退出时会有内存泄露,按网上的说法,在构造后激活它即可,但是我试了也没有效果?!
分享到:
相关推荐
14. **Browser Control API**: 使用这个API可以集成浏览器功能到自定义应用中,可能涉及网页加载、导航和交互。 15-18. **XML解析和Web Services API**: 这部分可能详细介绍了如何在Symbian上解析XML文档,以及...
本学习笔记旨在为初学者提供全面、细致的Symbian操作系统知识,帮助你快速入门并深入理解其工作原理。 一、Symbian系统概述 Symbian操作系统最初由英国的EPOC公司开发,后被诺基亚收购并成为其主要的操作系统平台。...
【Symbian学习笔记概述】 Symbian操作系统是一款曾经广泛应用于智能手机的操作系统,尤其在诺基亚手机上占据主导地位。对于想要学习Symbian开发的初学者来说,理解其开发环境的搭建至关重要。本系列笔记共28讲,...
"Symbian browser control"指的是在Symbian系统中用于构建应用程序的一部分,特别是与网页浏览功能相关的部分。这个“浏览器嵌入控件”允许开发者将网页浏览功能集成到他们的应用中,就像在桌面操作系统中使用IE ...
本资料集围绕“Symbian+网络编程之使用Socket+API”这一主题,详细介绍了如何在Symbian平台上通过Socket API实现网络通信,为开发者提供了宝贵的实战指导。 Socket,通常被称为套接字,是网络通信中的基本单元,它...
- **官方文档**: Symbian SDK 中通常会包含许多示例代码,这些示例可以帮助开发者理解如何使用特定的功能或 API。 - **在线资源**: 除了 SDK 包含的示例外,还可以通过访问 Nokia Developer Community 等网站获取更...
**Symbian操作系统详解** Symbian是一款历史悠久的智能手机操作系统,尤其在2000年至2010年间,它是全球领先的移动设备...通过深入学习和实践,开发者可以从Symbian中学到很多关于移动平台优化和资源管理的宝贵经验。
**塞班60 PYTHON API** 是一个专为Symbian操作系统设计的Python环境,简化了应用程序开发流程,并为Symbian C++ API提供了一种脚本解决方案。此文档主要介绍的是基于Python 2.2.2版本的Python for S60平台1.3.13版本...
在Symbian操作系统中,网络编程的一个重要方面是使用Socket API。Socket API允许开发者创建能够进行网络通信的应用程序,无论是互联网、红外线还是蓝牙技术。本文主要针对Symbian平台的开发者,旨在介绍如何利用...
pys60 是一个 Python 的移植版本,专为塞班(Symbian)操作系统设计,使得开发者能够使用 Python 语言在智能手机上创建应用程序。 Python API 在这里指的是 pys60 的 API 文档或库,这可能包括类、函数、模块和接口...
### Symbian C++ API (P.I.P.S.) #### 引言 Symbian OS 是一款专有的操作系统,具有自定义架构、API 和编程习语。在 Symbian OS 设计之初,C++ API 和语言标准尚不成熟,并未针对移动或嵌入式系统的特定约束进行...
以上知识点构成了Symbian笔记的主要内容,通过学习这份笔记,开发者不仅可以理解Symbian操作系统的运作原理,还能掌握实际开发中的技巧和最佳实践。虽然Symbian系统现在已不流行,但其设计理念和许多技术仍对现代...
这篇笔记将深入探讨如何在Symbian上实现SQL语句中的增、删、改、查(CRUD)操作。 ### 增(Create) 在Symbian中创建新记录通常涉及以下步骤: 1. **打开数据库**:首先,需要使用`RDatabase`类打开一个已存在的...
Lithium 是和 jQuery 一起使用的轻量级库,为jQuery增加很多很有用的 API,提供了经典继承、观察者(发布、订阅者模式)、绑定、命名空间、IE8 JS 1.6,1.8 填充物等支持。 示例代码: Li.isIE - will be set when...
在Symbian操作系统中,蓝牙API是一个重要的组件,它允许设备之间进行无线通信。这个API主要关注的是蓝牙套接字的使用,这是建立蓝牙连接和交换数据的基础。蓝牙套接字API设计得既支持客户端角色,也支持服务器角色,...
### Symbian塞班操作系统深度解析 #### Symbian简介:智能移动终端的先驱者 Symbian操作系统,源自英国宝意昂公司(Psion)的EPOC操作系统,其设计理念强调“使用电子产品如同品尝乳酪般简单”。EPOC的命名灵感...