eVC++开发实例

来源:互联网 发布:英雄联盟网络不稳定 编辑:程序博客网 时间:2024/05/09 07:03

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());
}

EVC++开发实例之浏览器窗口(图一)
图1 显示GIF截图
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 魅族手机摔掉无法开机怎么办 魅族音量+电源键直接开机了怎么办 魅蓝2数字锁机了怎么办 苹果5s蓝屏开不了机怎么办 红米pro更新开发版发热卡怎么办 5s手机音量增大键失灵怎么办 眼睛看手机久了模糊应怎么办 华为无线自拍杆连opp手机怎么办 苹果手机进水后自动跳电怎么办 魅族手机返回键不好使怎么办 手机壳是玻璃的摔坏了怎么办 魅族手机进水了开不了机怎么办 打发票机屏忘记了密码怎么办 魅族手机升级显示电量不足怎么办 魅蓝手机的图库没了怎么办 魅蓝5s屏幕碎了怎么办 魅族手机中间的home键失灵怎么办 魅族手机突然关机开不了机了怎么办 魅蓝3s卡顿怎么办视频 魅蓝3s手机太卡怎么办 红米4x外放破音怎么办 魅族手机刷机后内存变小了怎么办 手机用久了内存越来越小怎么办魅族 贴了车膜左右后视镜反光怎么办 贴手机膜时酒精没了怎么办 魅蓝e外屏幕碎了怎么办 贴的手机膜边缘翘起来着怎么办 手机后面贴的膜都是胶怎么办 车漆外面一层保护膜被划开了怎么办 美团骑手gps信号弱时怎么办 华为荣耀4x充电插口坏了怎么办 华为畅享5s开不了机怎么办 华为梅特10忘记账号密码怎么办 华为荣耀8充电接口坏了怎么办 华为手机锁屏了自动开屏怎么办 支付宝收货地址写错了怎么办 支付宝领海报地址写错了怎么办 手机总是弹出日历已停止运行怎么办 华为mate8忘了锁屏密码怎么办 红米4a打王者卡怎么办 苹果5s软件更新密码忘记了怎么办