|
编程实现
Linux操作系统的桌面环境KDE提供了一个文件管理器KFM,它和IE一样既可以浏览本地目录和文件,也可以浏览网页,并且KFM还提供了C++编程接口: KHTMLView类。我们可以创建一个KHTMLView类的子类CHtmlView来浏览下载的网页文件。
1.在窗口中显示HTML页面
int CHtmlView:: showPage(const char * path)
{ //显示path指定的文件中所包含的HTML页面
if(path == NULL)
return -1;
else
{
FILE * pfile;
//打开包含页面的文件
if((pfile = fopen((const char*)path,“rb”)) != NULL)
{
int blocklen = 0x10000;
char * c = new char[blocklen+1];
KURL u((const char*)path);
//类成员函数,清除窗口内原有内容,并初始化窗口,准备显示新页面
begin( u.directoryURL() );
while(1)
{
//读出网页文件的内容
int len = fread(c,sizeof(char),blocklen,pfile);
//类成员函数,将读取的内容写入KHTMLView类的缓冲区
write(c);
//文件读取完毕后退出循环
if(len < blocklen)
break;
}
//类成员函数,标示HTML页面已经全部写入缓冲区
end();
//类成员函数,分析缓冲区中的HTML代码
parse();
//类成员函数,显示HTML页面
show();
delete [] c;
}
else return -1;
}
return 0;
} |
2.响应超级链接的点击
定义鼠标事件处理函数mousePressedHook()覆盖KHTMLView类中的同型虚拟函数。当用户用鼠标点击网页中的超级链接时,该函数将被调用。被点击的超级链接的地址会作为参数自动传入该函数。由于网页文件中的所有超级链接已做过本地镜像处理,所以,只要该链接所指向的文件已经被下载程序正确地下载到本地,那么使用showPage函数就能调入并显示此页。
bool CHtmlView:: mousePressedHook
( const char* _url, const char *_target,
QMouseEvent *_ev, bool _isselected )
{
KHTMLView:: mousePressedHook(_url,_target,_ev,_isselected);
//显示被点击的页面
showPage(_url);
return true;
} |
在生成Kdevelop的窗口应用程序框架的View类中定义一个ChtmlView对象,将View类作为其父窗口:
ChtmlView *m_htmlview = new ChtmlView(this,“HtmlViewer”);
/*调用showPage函数显示path指向的网页文件*/
m_htmlview-> showPage(path); |
此外,我们还可以在此基础上加入更多的功能,依靠KDevelop所提供的丰富的图形用户接口类将浏览器设计得更美观易用。
|