IE浏览器作为微软Windows系统捆绑销售的一个浏览工具.docx

上传人:b****6 文档编号:5098440 上传时间:2022-12-13 格式:DOCX 页数:24 大小:22KB
下载 相关 举报
IE浏览器作为微软Windows系统捆绑销售的一个浏览工具.docx_第1页
第1页 / 共24页
IE浏览器作为微软Windows系统捆绑销售的一个浏览工具.docx_第2页
第2页 / 共24页
IE浏览器作为微软Windows系统捆绑销售的一个浏览工具.docx_第3页
第3页 / 共24页
IE浏览器作为微软Windows系统捆绑销售的一个浏览工具.docx_第4页
第4页 / 共24页
IE浏览器作为微软Windows系统捆绑销售的一个浏览工具.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

IE浏览器作为微软Windows系统捆绑销售的一个浏览工具.docx

《IE浏览器作为微软Windows系统捆绑销售的一个浏览工具.docx》由会员分享,可在线阅读,更多相关《IE浏览器作为微软Windows系统捆绑销售的一个浏览工具.docx(24页珍藏版)》请在冰豆网上搜索。

IE浏览器作为微软Windows系统捆绑销售的一个浏览工具.docx

IE浏览器作为微软Windows系统捆绑销售的一个浏览工具

 

前言

 

IE浏览器作为微软Windows系统捆绑销售的一个浏览工具,用

 

来浏览千姿百态的网页,目前它已经占据了浏览器市场的半壁江山,

 

成为Windows用户不可或缺的工具。

首先,它的界面设计的很漂亮,如扁平按纽(按钮上的图像为灰色,当鼠标放在按钮上时,按钮突起,这种状态称为手柄,并且其上的图像变得鲜艳醒目)、按钮上的文字

 

说明以及按钮边上的小黑三角形状的下拉箭头(单击时显示下拉菜

 

单)、工具条上的地址输入栏等,都体现了Windows2000

的风格;

其次,它的收藏栏可以收藏用户喜爱的网络地址,这一切都为

IE的

流行打下了坚实的基础。

说了那么多,也许读者朋友们感觉到

IE实

现起来一定非常困难,其实IE也是个"纸老虎",实现它的难点主要是

在界面效果和显示收藏夹上,笔者在本文中有针对性的叙述了

IE界

 

面、收藏网页的显示、网页的浏览等功能的实现,仔细看过这篇文章后,相信读者朋友们一定可以打造出一个属于自己的浏览器。

本文中的代码在Windows2000、VisualC++6.0环境下编译通过,程序运行正常。

程序运行界面如下:

 

图一、浏览器的运行界面

 

一、浏览器的界面实现

 

首先启动VisualC++6.0,生成一个名为MYIE单文档项目,注

 

意在此过程中不要选择工具条和状态条选项,这样才能更方便我们在

 

后续工作中用代码实现Windwos2000风格的工具条、状态条;在工

 

具条中添加地址栏;项目的视图类的基类为ChtmlView,该类的

 

Navigate2()成员函数专门用来现实超文本格式的文档。

在主框架

 

类CmainFrame中定义CStatusBarm_wndStatusBar(状态条对象)、

 

CToolBarm_wndToolBar(工具栏对象)、CReBarm_wndReBar

 

(、CComboBoxExm_wndAddress(扩展的组合框对象,用来作为

 

地址栏)、CAnimateCtrlm_wndAnimate(动画控件,用来在工具栏

 

上显示动画)、图像列表对象CImageListimg(存放显示在工具栏上的图标)等对象。

向当前项目AVI资源文件,ID标志IDR_MFCAVI,添加Bitmap(位图)资源,ID标志分别为IDB_COLDTOOLBAR、IDB_HOTTOOLBAR,分别如下所示:

 

图二、包含按钮图标的位图

 

1)IE风格工具条

 

IE风格界面的实现主要在主框架类的CMainFrame:

:

OnCreate

 

()函数中实现,它的主要思想如下:

CReBar对象用来作为工具

 

条、地址栏、动画控件的容器,CImageList对象,然后分别装载工

 

具栏上按钮的热点图像和正常状态下显示的图像,并将该对象附给工

 

具条对象,使之建立关联。

为了显示扁平工具栏,需要用CreateEx()

 

函数创建CToolBar对象m_wndToolBar,用ModifyStyle()函数将

 

工具栏的风格设为扁平类型,注意这里不能用CToolBar:

:

Create()

 

或CToolBar:

:

SetBarStyle()设置这种新风格。

CToolBar类不支持TBSTYLE_FLAT,要解决这个问题,必须绕过CToolBar类,使用CWnd:

:

ModifyStyle()。

要将某一个工具栏按钮设置为附带有下拉按钮,可以调用SetButtonInfo()设置按钮的风格为

 

TBSTYLE_DROPDOWN。

至于按钮带有中文提示,用工具栏的

 

SetButtonText()就可以轻松实现了。

下面是实现IE风格界面的代

 

码和注释:

 

intCMainFrame:

:

OnCreate(LPCREATESTRUCTlpCreateStruct)

 

{

 

CImageListimg;//图像列表对象;

 

CStringstr;//字符串对象;

 

if(CFrameWnd:

:

OnCreate(lpCreateStruct)==-1)

 

return-1;

 

if(!

m_wndReBar.Create(this))//创建CReBar对象;

 

{TRACE0("Failedtocreaterebar\n");

 

return-1;}

 

if(!

m_wndToolBar.CreateEx(this))//使用CreateEx()函数创建工具

 

条对象;

 

{TRACE0("Failedtocreatetoolbar\n");return-1;}

 

//设置工具栏中的按钮最大最小尺寸;

 

m_wndToolBar.GetToolBarCtrl().SetButtonWidth(50,150);

 

//设置工具栏上的按钮支持下拉箭头风格;

 

m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_

 

DRAWDDARROWS);

 

//向图像列表装载热点图像资源,IDB_HOTTOOLBAR为热点图像资

 

源IDimg.Create(IDB_HOTTOOLBAR,22,0,RGB(255,0,255));m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);

 

img.Detach();

 

//图象列表装载正常状态的图像资源,IDB_COLDTOOLBAR为图像

 

资源ID

 

img.Create(IDB_COLDTOOLBAR,22,0,RGB(255,0,255));m_wndToolBar.GetToolBarCtrl().SetImageList(&img);img.Detach();

//设置工具条为扁平风格

 

m_wndToolBar.ModifyStyle(0,TBSTYLE_FLAT|

 

TBSTYLE_TRANSPARENT);

 

//设置工具条上的按钮个数为9个;

 

m_wndToolBar.SetButtons(NULL,9);

 

//装载字符串资源,设置按钮上的文本和按钮的标识号;

 

m_wndToolBar.SetButtonInfo(0,ID_GO_BACK,

 

TBSTYLE_BUTTON,0);

 

str.LoadString(IDS_BACK);

 

m_wndToolBar.SetButtonText(0,str);

 

m_wndToolBar.SetButtonInfo(1,

 

TBSTYLE_BUTTON,1);

 

str.LoadString(IDS_FORWARD);

 

m_wndToolBar.SetButtonText(1,str);

 

m_wndToolBar.SetButtonInfo(2,

 

TBSTYLE_BUTTON,2);

 

str.LoadString(IDS_STOP);

 

m_wndToolBar.SetButtonText(2,str);

 

m_wndToolBar.SetButtonInfo(3,

 

TBSTYLE_BUTTON,3);

 

str.LoadString(IDS_REFRESH);

 

m_wndToolBar.SetButtonText(3,str);

 

m_wndToolBar.SetButtonInfo(4,

 

TBSTYLE_BUTTON,4);

 

str.LoadString(IDS_HOME);

 

m_wndToolBar.SetButtonText(4,str);

 

m_wndToolBar.SetButtonInfo(5,

 

TBSTYLE_BUTTON,5);

 

str.LoadString(IDS_SEARCH);

 

m_wndToolBar.SetButtonText(5,str);

 

ID_GO_FORWARD,

 

ID_VIEW_STOP,

 

ID_VIEW_REFRESH,

 

ID_GO_START_PAGE,

 

ID_GO_SEARCH_THE_WEB,

 

m_wndToolBar.SetButtonInfo(6,ID_FAVORITES_DROPDOWN,

 

TBSTYLE_BUTTON|TBSTYLE_DROPDOWN,6);

 

str.LoadString(IDS_FAVORITES);

 

m_wndToolBar.SetButtonText(6,str);

 

m_wndToolBar.SetButtonInfo(7,ID_FILE_PRINT,

 

TBSTYLE_BUTTON,7);

 

str.LoadString(IDS_PRINT);

 

m_wndToolBar.SetButtonText(7,str);

 

m_wndToolBar.SetButtonInfo(8,ID_FONT_DROPDOWN,TBSTYLE_BUTTON|TBSTYLE_DROPDOWN,8);str.LoadString(IDS_FONT);

m_wndToolBar.SetButtonText(8,str);

 

//设置工具栏上的按钮尺寸和显示在按钮上的图标尺寸;

 

CRectrectToolBar;

 

m_wndToolBar.GetItemRect(0,&rectToolBar);

 

m_wndToolBar.SetSizes(rectToolBar.Size(),CSize(30,20));

 

//创建组合框,用来作为地址栏;

 

if(!

m_wndAddress.Create(CBS_DROPDOWN|WS_CHILD,CRect(0,0,200,120),this,AFX_IDW_TOOLBAR+1))

{TRACE0("Failedtocreatecombobox\n");

 

return-1;}

 

//创建动画控件对象,并打开AVI资源IDR_MFCAVI;

 

m_wndAnimate.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,10,

 

10),this,AFX_IDW_TOOLBAR+2);

 

m_wndAnimate.Open(IDR_MFCAVI);

 

//将工具条、地址栏、动画控件等添加到CReBar对象中;

 

m_wndReBar.AddBar(&m_wndToolBar);

 

m_wndReBar.AddBar(&m_wndAnimate,NULL,NULL,

 

RBBS_FIXEDSIZE|RBBS_FIXEDBMP);

 

str.LoadString(IDS_ADDRESS);

 

m_wndReBar.AddBar(&m_wndAddress,str,NULL,

 

RBBS_FIXEDBMP|RBBS_BREAK);

 

//再次设置工具条风格,使之有工具栏提示功能;

 

m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_FIXED);//设置状态条;

 

if(!

m_wndStatusBar.Create(this)

 

||!

m_wndStatusBar.SetIndicators(indicators,

 

sizeof(indicators)/sizeof(UINT)))

 

{TRACE0("Failedtocreatestatusbar\n");

 

return-1;}

 

.//实现"Favorites"菜单的部分,该部分在第二部分介绍;

 

return0;

 

}

 

(2)工具条上的下拉菜单

 

当用户点击按钮上的下拉箭头时,将出现相应的菜单,为了实现

 

这个功能,手下需要在CMainFrame.cpp文件的消息映射中添加消

 

息映射:

ON_NOTIFY(TBN_DROPDOWN,AFX_IDW_TOOLBAR,

 

OnDropDown);在CmainFrame.h文件中添加消息映射函数声明:

 

afx_msgvoidOnDropDown(NMHDR*pNotifyStruct,LRESULT*

 

pResult);最后添加下面的代码:

 

voidCMainFrame:

:

OnDropDown(NMHDR*pNotifyStruct,

 

LRESULT*pResult)

 

{

 

NMTOOLBAR*pNMToolBar=(NMTOOLBAR*)pNotifyStruct;CRectrect;

//得到下拉箭头的位置;

 

m_wndToolBar.GetToolBarCtrl().GetRect(pNMToolBar->iItem,

 

&rect);

 

rect.top=rect.bottom;

 

:

:

ClientToScreen(pNMToolBar->hdr.hwndFrom,&rect.TopLeft());if(pNMToolBar->iItem==ID_FONT_DROPDOWN)

//判断是否为选择字体的下拉箭头;

 

{

 

CMenumenu;

 

CMenu*pPopup;

 

menu.LoadMenu(IDR_FONT_POPUP);

 

pPopup=menu.GetSubMenu(0);

 

pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,rect.left,rect.top+1,AfxGetMainWnd());}

 

elseif(pNMToolBar->iItem==ID_FAVORITES_DROPDOWN)

 

{//判断是否为显示收藏网页的下拉箭头;

 

CMenu*pPopup;

 

pPopup=GetMenu()->GetSubMenu(3);

 

pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,rect.left,rect.top+1,AfxGetMainWnd());}

 

*pResult=TBDDRET_DEFAULT;

 

}

 

3)工具条上的动画实现

 

为了美化程序的界面,程序的复合工具条上放置了一个动画控

 

件,用来在适当的时机播放一个动画片段,实现动画效果。

下面的代

 

码实现了创建动画控件对象,并打开AVI资源IDR_MFCAVI:

 

m_wndAnimate.Create(WS_CHILD|WS_VISIBLE,CRect(0,0,10,

 

10),this,AFX_IDW_TOOLBAR+2);

 

m_wndAnimate.Open(IDR_MFCAVI);

 

CanimateCtrl类提供了Play()、Seek()、Stop()、Close

 

()等函数用来为播放视频文件服务,它们使用起来都非常简单,这

 

里就不再赘述了。

 

4)地址栏的操作

 

当用户在地址栏上输入网页地址并按下回车键后,浏览器将显示

 

该网页的内容,并将在地址栏中记录下该地址。

因为回车键按下后对

 

应的消息ID为IDOK,为此,需要在CmainFrame类中添加消息映

 

射ON_COMMAND(IDOK,OnNewAddressEnter)和消息响应函数

 

afx_msgvoidOnNewAddressEnter()。

该函数实现代码如下:

 

voidCMainFrame:

:

OnNewAddressEnter()

 

{

 

CStringstr;

 

//获取地址栏中的字符串;

 

m_wndAddress.GetEditCtrl()->GetWindowText(str);

 

((CMfcieView*)GetActiveView())->Navigate2(str,0,NULL);//显示该

 

网页;

 

//将该网址添加到地址栏对应的组合框中;

 

COMBOBOXEXITEMitem;

 

item.mask=CBEIF_TEXT;

 

item.iItem=-1;

 

item.pszText=(LPTSTR)(LPCTSTR)str;

 

m_wndAddress.InsertItem(&item);

 

}

 

同理,还要在

 

CmainFrame

 

类中为地址栏(

 

ID

 

AFX_IDW_TOOLBAR

+

1)

加消息

映射

ON_CBN_SELENDOK(AFX_IDW_TOOLBAR+

1,OnNewAddress)

和消息响应函数OnNewAddress,用来处理用户从地址栏组合框中

 

选择网址的操作,该函数的实现代码如下:

 

voidCMainFrame:

:

OnNewAddress()

 

{

 

CStringstr;

 

m_wndAddress.GetLBText(m_wndAddress.GetCurSel(),str);

 

((CMYIEView*)GetActiveView())->Navigate2(str,0,NULL);

 

}

 

二、实现收藏菜单

 

一般IE的用户都有个习惯,那就是将自己喜欢的网址保存起来,

 

以方便今后快速的登陆,为了使我们的浏览器能够显示IE收藏过的

 

网址,程序中设置了一个"Favorites"菜单,通过RegOpenKey()、RegQueryValueEx()等函数操作Windows的注册表中的HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Current

 

Version\\Explorer\\UserShellFolders项,将收藏的网址显示到菜单

 

上。

为此,笔者定义了两个函数,实现代码如下所示:

 

TCHARGetDir()//得到存放用户收藏网址的目录;

 

{

 

TCHARsz[MAX_PATH];

 

TCHARszPath[MAX_PATH];

 

HKEYhKey;

 

DWORDdwSize;

 

CMenu*pMenu;

 

//得到"Favorites"菜单,并删除空白的子菜单项;

 

pMenu=GetMenu()->GetSubMenu(3);while(pMenu->DeleteMenu(0,MF_BYPOSITION));

//findoutfromtheregistrywherethefavoritesarelocated.if(RegOpenKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User

ShellFolders"),&hKey)!

=ERROR_SUCCESS)

 

{

 

TRACE0("Favoritesfoldernotfound\n");

 

return0;

 

}

 

dwSize=sizeof(sz);

 

RegQueryValueEx(hKey,_T("Favorites"),NULL,NULL,

 

(LPBYTE)sz,&dwSize);

 

ExpandEnvironmentStrings(sz,szPath,MAX_PATH);

 

RegCloseKey(hKey);

 

ReturnszPath

 

}

 

intCMainFrame:

:

BuildFavoritesMenu(LPCTSTRpszPath,intnStartPos,CMenu*pMenu)

{

 

CStringstrPath(pszPath);

 

CStringstrPath2;

 

CStringstr;

 

WIN32_FIND_DATAwfd;

 

HANDLEh;

 

intnPos;

 

intnEndPos;

 

intnNewEndPos;

 

intnLastDir;

 

TCHARbuf[INTERNET_MAX_PATH_LENGTH];CStringArrayastrFavorites;

CStringArrayastrDirs;

 

CMenu*pSubMenu;

 

if(strPath[strPath.GetLength()-1]!

=_T(′′))

 

strPath+=_T(′′);

 

strPath2=strPath;

 

strPath+="*.*";

 

//扫描当前目录,首先搜索*.URL文件,然后是可能含有*.URL文件的子目录;

 

h=FindFirstFile(strPath,&wfd);

 

if(h!

=INVALID_HANDLE_VALUE)

 

{

 

nEndPos=nStartPos;

 

do

 

{

 

if((wfd.dwFileAttributes&

 

(FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM))==0)

{

 

str=wfd.cFileName;

 

if(str.Right(4)==_T(".url"))

 

{/*URL文件和INI文件格式类似,所以我们可以使用

 

GetPrivatePr

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1