`
yesjavame
  • 浏览: 687168 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Symbian学习笔记(14):使用Browser Control API

阅读更多
再把这个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,在退出时会有内存泄露,按网上的说法,在构造后激活它即可,但是我试了也没有效果?!

分享到:
评论

相关推荐

    Symbian学习笔记

    14. **Browser Control API**: 使用这个API可以集成浏览器功能到自定义应用中,可能涉及网页加载、导航和交互。 15-18. **XML解析和Web Services API**: 这部分可能详细介绍了如何在Symbian上解析XML文档,以及...

    symbian学习笔记(超级经典-适用于初学者)

    本学习笔记旨在为初学者提供全面、细致的Symbian操作系统知识,帮助你快速入门并深入理解其工作原理。 一、Symbian系统概述 Symbian操作系统最初由英国的EPOC公司开发,后被诺基亚收购并成为其主要的操作系统平台。...

    symbian学习笔记,全28讲

    【Symbian学习笔记概述】 Symbian操作系统是一款曾经广泛应用于智能手机的操作系统,尤其在诺基亚手机上占据主导地位。对于想要学习Symbian开发的初学者来说,理解其开发环境的搭建至关重要。本系列笔记共28讲,...

    0ab.zip_symbian_symbian brows_symbian browser_symbian richedit_s

    "Symbian browser control"指的是在Symbian系统中用于构建应用程序的一部分,特别是与网页浏览功能相关的部分。这个“浏览器嵌入控件”允许开发者将网页浏览功能集成到他们的应用中,就像在桌面操作系统中使用IE ...

    Symbian+网络编程之使用Socket+API.rar

    本资料集围绕“Symbian+网络编程之使用Socket+API”这一主题,详细介绍了如何在Symbian平台上通过Socket API实现网络通信,为开发者提供了宝贵的实战指导。 Socket,通常被称为套接字,是网络通信中的基本单元,它...

    Symbian学习笔记(中国移动开发者社区).pdf

    - **官方文档**: Symbian SDK 中通常会包含许多示例代码,这些示例可以帮助开发者理解如何使用特定的功能或 API。 - **在线资源**: 除了 SDK 包含的示例外,还可以通过访问 Nokia Developer Community 等网站获取更...

    symbian 学习笔记

    **Symbian操作系统详解** Symbian是一款历史悠久的智能手机操作系统,尤其在2000年至2010年间,它是全球领先的移动设备...通过深入学习和实践,开发者可以从Symbian中学到很多关于移动平台优化和资源管理的宝贵经验。

    塞班60 PYTHON API

    **塞班60 PYTHON API** 是一个专为Symbian操作系统设计的Python环境,简化了应用程序开发流程,并为Symbian C++ API提供了一种脚本解决方案。此文档主要介绍的是基于Python 2.2.2版本的Python for S60平台1.3.13版本...

    Symbian 网络编程之使用Socket API

    在Symbian操作系统中,网络编程的一个重要方面是使用Socket API。Socket API允许开发者创建能够进行网络通信的应用程序,无论是互联网、红外线还是蓝牙技术。本文主要针对Symbian平台的开发者,旨在介绍如何利用...

    Python_API.tar.gz_Python A_pys60 a_python_python api中文_symbian a

    pys60 是一个 Python 的移植版本,专为塞班(Symbian)操作系统设计,使得开发者能够使用 Python 语言在智能手机上创建应用程序。 Python API 在这里指的是 pys60 的 API 文档或库,这可能包括类、函数、模块和接口...

    P.I.P.S..Symbian C++ API

    ### Symbian C++ API (P.I.P.S.) #### 引言 Symbian OS 是一款专有的操作系统,具有自定义架构、API 和编程习语。在 Symbian OS 设计之初,C++ API 和语言标准尚不成熟,并未针对移动或嵌入式系统的特定约束进行...

    真正的Symbian笔记.docx

    以上知识点构成了Symbian笔记的主要内容,通过学习这份笔记,开发者不仅可以理解Symbian操作系统的运作原理,还能掌握实际开发中的技巧和最佳实践。虽然Symbian系统现在已不流行,但其设计理念和许多技术仍对现代...

    symbian 数据库操作笔记

    这篇笔记将深入探讨如何在Symbian上实现SQL语句中的增、删、改、查(CRUD)操作。 ### 增(Create) 在Symbian中创建新记录通常涉及以下步骤: 1. **打开数据库**:首先,需要使用`RDatabase`类打开一个已存在的...

    jQueryAPI增强版Lithium.zip

    Lithium 是和 jQuery 一起使用的轻量级库,为jQuery增加很多很有用的 API,提供了经典继承、观察者(发布、订阅者模式)、绑定、命名空间、IE8 JS 1.6,1.8 填充物等支持。 示例代码: Li.isIE - will be set when...

    Symbian 蓝牙API指南

    在Symbian操作系统中,蓝牙API是一个重要的组件,它允许设备之间进行无线通信。这个API主要关注的是蓝牙套接字的使用,这是建立蓝牙连接和交换数据的基础。蓝牙套接字API设计得既支持客户端角色,也支持服务器角色,...

    Symbian塞班操作系统

    ### Symbian塞班操作系统深度解析 #### Symbian简介:智能移动终端的先驱者 Symbian操作系统,源自英国宝意昂公司(Psion)的EPOC操作系统,其设计理念强调“使用电子产品如同品尝乳酪般简单”。EPOC的命名灵感...

Global site tag (gtag.js) - Google Analytics