中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 硬件与嵌入开发
EVC开发实例三:浏览器窗口
作者:未知 时间:2005-07-20 14:22 出处:VC知识库 责编:chinaitpower
              摘要:EVC开发实例三:浏览器窗口

EVC开发实例三:浏览器窗口


作者:付林林


  曾有人问过我关于显示GIF图片的问题。我的回答是要么使用国外做的专用于显示GIF图片的类,要么利用IWebBrowser COM组件。我还说过我用它做过自定义的IE。其实微软提供了CE下IE的源程序,就是利用这个组件来实现IE的各个功能的。我做IE是因为Windows CE自带的IE在各个方面都不符合我们的要求,于是我在IE源程序的基础上编写了符合我们要求的浏览器。这篇文章并不是要讲解如何做浏览器,而是用IWebBrowser组件来显示GIF、JPG图片,当然也能够显示网页。做浏览器要比只显示图片、网页要复杂的多。
  在Pocket PC下开发的人多数会感到奇怪,不是有HtmlView吗?怎么还要自己写啊。因为微软为Pocket PC定制的内核包含的SDK中,含有支持网页浏览的控件,而在Windows CE.NET中没有。这就需要自己实现了。在这里我采用模拟器来试验。模拟器能通过实际平台就更能通过了。操作基本一样。

一、制作带有IE的内核
  在模拟器下定制一个内核大家应该不会陌生了,以前的文章中我已经讲过不止一次了。所以在这里我会简略的说明如何定制内核。第一步,选择"EMULATOR:X86",之后在"Available configuration"中选择"Internet Appliance"。接着只选择"Internet Browser",第五步只选择"Internet Browser",第六步去掉所有网络选项,最后"Done"。编译前加入环境变量"IMGRAM64",然后选择"EMULATOR:x86 Win32{WCE emulator} Release",开始编译。编译后单击"Download/Initialize"
  下载内核到模拟器上运行。单击桌面上的IE快捷图标,如果IE显示出来那第一步就成功了。

二、编写程序
  这个程序我用EVC单独编写编译。而不在PB下编写。PB附带的应用程序向导没有MFC的选项,不如用EVC编写方便,编译后再将程序复制到内核目录下,通过PB来运行。
  编写程序我也不会过于详细的讲解,只讲解相关的代码。调出EVC,利用应用程序向导产生一个MFC程序,假设工程名为IEGIF,第一步选择单文档程序,语言下拉列表随便选。第二步复选"Windows Sockets"和"ActiveX Controls",其它步骤默认。
  利用IWebBrowser组件前当然要先包含它需要的头文件了。在"stdafx . h"中添加下列文件名:

/////////////////////
#undef __urlmon_h__
#include <urlmon.h>

#undef _SHLOBJ_H_
#include <shlobj.h>

#undef _WINNETWK_
#include <winnetwk.h>

#undef __AFXHTML_H__
#include "afxhtml.h"
在IEGIFView . h文件里CIEGIFView类的声明中添加下列代码:
public:
	IWebBrowser2  *m_pBrowser;
	CWnd         m_wndBrowser;   ////IWebBrowser2 的容器
	void           Navigate(CString); ///调用IWebBrowser2的Navigate接口
在CIEGIFView类的构造函数中初始化指针:
CIEGIFView:: CIEGIFView ()
{
	m_pBrowser = NULL;
}
在IEGIFView . cpp文件里定义下列函数:
void  CIEGIFView::Navigate(CString  strURL)
{
	COleVariant     empty;
	BSTR bstrURL = strURL.AllocSysString();
	m_pBrowser->Navigate (bstrURL, COleVariant((long) 0, VT_I4), empty, empty, empty);
}
在IEGIFView . cpp文件里定义消息处理函数:
///响应WM_CREATE
int CIEGIFView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	////////////////////////////////////////////////////
	RECT rectClient;
	GetClientRect(&rectClient);  ///在客户端整个区域显示GIF
	///创建控件
	if (! m_wndBrowser.CreateControl(CLSID_WebBrowser, NULL, WS_VISIBLE | WS_CHILD, 
	rectClient, this, AFX_IDW_PANE_FIRST))
	{
		DestroyWindow();
		return FALSE;
	}
	///得到指针
	LPUNKNOWN lpUnk = m_wndBrowser.GetControlUnknown();
	HRESULT hr = lpUnk->QueryInterface(IID_IWebBrowser2, (void**) &m_pBrowser);
	if (! SUCCEEDED(hr))
	{
		m_pBrowser = NULL;
		m_wndBrowser.DestroyWindow();
		DestroyWindow();
		return FALSE;
	}
	
	return 0;
}

///响应命令ON_COMMAND(ID_OPENGIF, OnOpenGIF) 
///随便用一个按钮,或菜单项。ID为ID_OPENGIF
void CIEGIFView::OnOpenGIF() 
{
	CFileDialog  dlg(TRUE, NULL, NULL);	
	if(dlg.DoModal() == IDCANCEL)
	{
		return;
	}
	Navigate(dlg.GetPathName());
}

图1 显示GIF截图

注:代码一部分源至 MSDN

写作时间:2004-5-25

未经本文作者同意,不准擅自转载本篇文章。联系作者请邮至:fllsoft@sina.com或windowsce@tom.com

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有