登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: [ppc/evc/wince]EVC开发实例三:浏览器窗口     [回主站]     [分站链接]
标题
[ppc/evc/wince]EVC开发实例三:浏览器窗口
clq
浏览(0) + 2009-02-05 09:29:38 发表 编辑

关键字:


::首页 >> 文档中心 >> 在线杂志 >> 嵌入开发WinCE [ 在线杂志 第32期 ]

http://www.vckbase.com/document/viewdoc/?id=1145
 
[ 原创文档 本文适合中级读者 已阅读24861次 ]

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

#undef _SHLOBJ_H_
#include

#undef _WINNETWK_
#include

#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




最新评论 [发表评论] [文章投稿] 查看所有评论 推荐给好友 打印

包含的头文件不要那么复杂,只要包含Exdisp.h就可以了
( yulincat 发表于 2004-7-7 17:33:00)

ok ( tyong_obt 发表于 2004-6-3 13:30:00)

用IWebBrowser控件,凡是IE能实现的,开发者都能够实现。而且还能够自定义浏览器。 ( fllsoft 发表于 2004-5-29 14:57:00)

ppc或sp2002和2003下用
SHLoadImageFile(_T("\\temp\\xxx.jpg"));
就可以显示静态gif,jpg,bmp,png图像
( nbcool 发表于 2004-5-28 19:31:00)

已经修改,对不起! ( hangwire 发表于 2004-5-28 17:41:00)

题目标错了!!!! ( fllsoft 发表于 2004-5-28 16:20:00)

.......................................................
More...


版权所有 © 1999 - 2008 VC知识库


clq
2009-2-5 9:29:46 发表 编辑

jpg和BMP显示在wince,急!
楼主freeinsky(天子)2004-06-18 18:33:13 在 硬件/嵌入开发 / 嵌入开发(WinCE) 提问

我利用了cvoimage这个类来显示JPG了,可他好象不是所有的JPEG文件都能显示出来

谁有比较好的类,能直接显示出内存中的JPEG图象数据呢


总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1