4669|17

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WinCE 编写浏览器 [复制链接]

我在EVC中,利用应用程序向导产生一个MFC程序,假设工程名为Browser
在"stdafx . h"中添加下列文件名:

/////////////////////
#undef __urlmon_h__
#include
#undef _SHLOBJ_H_
#include
#undef _WINNETWK_
#include
#undef __AFXHTML_H__
#include "afxhtml.h"

在CBrowserView. h文件里CBrowserView类的声明中添加下列代码:
public:
  IWebBrowser2 *m_pBrowser;
  CWnd     m_wndBrowser;  ////IWebBrowser2 的容器
  void      Navigate(CString); ///调用IWebBrowser2的Navigate接口

在CBrowserView类的构造函数中初始化指针:
CBrowserView:: CBrowserView()
{
  m_pBrowser = NULL;
}

在CBrowserView. cpp文件里定义下列函数:
void CBrowserView::Navigate(CString strURL)
{
  COleVariant empty;
  BSTR bstrURL = strURL.AllocSysString();
  m_pBrowser->Navigate (bstrURL, COleVariant((long) 0, VT_I4), empty, empty, empty);
}

在CBrowserView. cpp文件里定义消息处理函数:
///响应WM_CREATE
int CBrowserView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  if (CView::OnCreate(lpCreateStruct) == -1)
    return -1;
  
  ////////////////////////////////////////////////////
  RECT rectClient;
  GetClientRect(&rectClient); ///在客户端整个区域显示Navigate
  ///创建控件
  MessageBox(_T("Error-------0"));
   if(!m_wndBrowser.CreateControl(CLSID_WebBrowser, NULL, WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))
        {
              MessageBox(_T("Error-------1"));
          DestroyWindow();
          MessageBox(_T("Error-------2"));
          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, OnOpenNavigate)
///随便用一个按钮,或菜单项。ID为ID_OPENNavigate
void CBrowserView::OnOpenNavigate()
{
  CFileDialog dlg(TRUE, NULL, NULL);  
  if(dlg.DoModal() == IDCANCEL)
  {
    return;
  }
  Navigate(dlg.GetPathName());
}

程序结果就是显示了“Error-------0”之后,就弹出了一个乱码对话框,然后程序就自动关闭了。
我想应该是 if(!m_wndBrowser.CreateControl(CLSID_WebBrowser, NULL, WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))
这句发生了异常。因为没有显示“Error-------1”对话框。但是,本人刚刚入门CE,不知道怎么写CE的浏览器程序(我只要可以上网就可以了),更不知道怎么用CreateControl函数了。

请问写过CE浏览器的或者知道怎么写CE浏览器的高手指点迷津,小弟感激不尽!!!谢谢!!!


此帖出自WindowsCE论坛

最新回复

但是如果把源代码改成:          MessageBox(_T("Error-------0"));         if(!m_wndBrowser.CreateControl(/*CLSID_WebBrowser,*/ L"Browser",NULL, WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))         {                 MessageBox(_T("Error-------1"));                 DestroyWindow();                 MessageBox(_T("Error-------3"));                 return FALSE;         } 的话,则Error-------1和Error-------3对话框都会显示,然后再退出程序。说明CreateControl返回值为0; 所以关键还是CreateControl怎么用。谁能帮帮小弟,谢谢了!!!  详情 回复 发表于 2008-10-6 20:45
点赞 关注
 

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
好像在sdk的帮助中有ie的code
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
请问是EVC的sdk吗?如果是的话,请问怎么看?是不是就是查看EVC的Document啊?
此帖出自WindowsCE论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

4
 
我说错了,是在pb的代码里有。
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(中级)

5
 
做个记号!
此帖出自WindowsCE论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
抱歉,我没有PB的SDK,因为我用的是EVC。能不能把代码复制一下??谢谢!!!如果太多的话,复制一个TXT发给我可以吗?(lijunminjay@hotmail.com)这是我的邮箱。劳驾了!!!
此帖出自WindowsCE论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

7
 
我看到网上都是这么写的:
// 建立檢視視窗本身
if (!CView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext))
      return FALSE;

if (!m_wndBrowser.CreateControl(CLSID_WebBrowser, lpszWindowName, WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))
{
      DestroyWindow();
      return FALSE;
}
是不是我第二个参数是NULL写错了啊?不懂,请指教!!!谢谢!!!

此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
你可以试试。

你不能单步跟一下?

调试问题,最好还是能找到错误位置和错误代码
此帖出自WindowsCE论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
我运行和编译通过的,但是我把源代码产生的exe文件复制到CE的开发板上运行的时候,就出现了乱码的对话框,然后程序就结束了。没有办法单步跟踪。请帮我想想办法。谢谢!!!
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
可以单步调试的,GOOGLE一下EVC怎么实现单步调试就OK了.能够调试你才能方便编码,把判断交给计算机去判断这样省力省心很多的.
此帖出自WindowsCE论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

11
 
我在if (!m_wndBrowser.CreateControl(CLSID_WebBrowser, lpszWindowName, WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST)) 前加了断点,想单步调试看一下它的值。但是按F5之后,系统弹出“An application targeting a Standard SDK for Windows CE.NET and built for the ARMV4I CPU cannot be run on the Emulator device. In order to run this applicaiton on any CPU other than the Emulator, you will have to install an SDK that is compatible with the Standard SDK for Windows CE.NET, then target a shadow platform pertaining to that SDK. Please see the eVC help documentation for additional details.”


我用的是EVC4.0,是不是没有安装Standard SDK for Windows CE.NET就不能单步调试了阿?如果我按F7的话同样会弹出这个对话框,但是可以生成CE5.0的一个exe文件。我通常把它复制到CE5.0的设备上都是可以用的,所以平时也没有注意这个问题。现在不能单步调试了,这个问题应该怎么解决呢?是不是不安装这个Standard SDK for Windows CE.NET就不能调试了,也不能解决显示浏览器这个功能了呢?

还望高手多多指教!谢谢!!!
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
关注!
此帖出自WindowsCE论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

13
 
有哪位高人能帮忙指点一下的吗?谢谢!!!
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

14
 
你编译时选择的sdk是什么?
此帖出自WindowsCE论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

15
 
        GetProxyOption();
        hr = CoCreateInstance(CLSID_WebBrowser, NULL,
                              CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
                              IID_IUnknown, (LPVOID *)(&pUnk));
        if (FAILED(hr))
            return FALSE;

        hr = pUnk->QueryInterface(IID_IOleObject, (LPVOID *)(&pObject));
        if (FAILED(hr))
            goto Cleanup;

        DWORD dwFlags;
        hr = pObject->GetMiscStatus(DVASPECT_CONTENT, &dwFlags);
        if (FAILED(hr))
            goto Cleanup;

        if (dwFlags & OLEMISC_SETCLIENTSITEFIRST)
        {
            IOleClientSite *pClientSite;
            hr = QueryInterface(IID_IOleClientSite, (LPVOID *)(&pClientSite));
            if (FAILED(hr))
                goto Cleanup;

            hr = pObject->SetClientSite(pClientSite);
            pClientSite->Release();
            if (FAILED(hr))
                goto Cleanup;
        }

        hr = Activate(pObject);
        if (FAILED(hr))
            goto Cleanup;

        hr = _pObject->QueryInterface(IID_IWebBrowser2, (void **)&_pBrowser);
        if (FAILED(hr))
            goto Cleanup;

        // See if there might be a url in lpszUrl
        hr = pUnk->QueryInterface(IID_IOleInPlaceActiveObject, (LPVOID *)(&_pIPActiveObj));
        if (FAILED(hr))
                        _pIPActiveObj = NULL;

        hr = S_FALSE;

        if (_fEmpty)
        {

            BSTR bstrURL = SysAllocString(_lpszUrl);
            if (bstrURL && bstrURL[0])
                _pBrowser->Navigate(bstrURL, NULL, NULL, NULL, NULL);
            else
                                _pBrowser->GoHome();
            SysFreeString(bstrURL);
                        memset(g_Urladress,'\0',sizeof(g_Urladress));
                        wcscpy(g_Urladress,bstrURL);
                        //printf("aaa%S,%S\n",bstrURL,g_Urladress);
               
        }
        hr = InitEvents();

这段是pb中关于创建浏览器的关键代码,并且已经使用过,可以使用,你可以参考下。
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

16
 
To dthxman:
   谢谢你的代码,可是这么当中一段代码实在没办法用,因为我不知道要加哪些头文件,还有一些成员变量也不知道如何定义。
To lenux:
   我用的是EVC4.0,你指的我选的SDK是指"Win32 [WCE ARMV4I] Release" 么?
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

17
 
我把创建控件的代码改了一下:
//创建控件
        MessageBox(_T("Error-------0"));
       
        HRESULT hr = m_wndBrowser.CreateControl(CLSID_WebBrowser, L"Browser", WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST);
        CString strError;
        strError.Format(_T("CreateControl出错:%d"),hr);  
    MessageBox(strError);  


        MessageBox(_T("Error-------00"));
        if(!m_wndBrowser.CreateControl(CLSID_WebBrowser, L"Browser", WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))
        {
                MessageBox(_T("Error-------1"));
                DestroyWindow();
                MessageBox(_T("Error-------3"));
                return FALSE;
        }
结果还是先显示了Error-------0对话框,然后就弹出了一个乱码对话框,然后程序就自动关闭了。
到底谁会用CreateControl创建浏览器的控件啊?请多多指教啊!!!谢谢!!!
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

18
 
但是如果把源代码改成:
         MessageBox(_T("Error-------0"));
        if(!m_wndBrowser.CreateControl(/*CLSID_WebBrowser,*/ L"Browser",NULL, WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST))
        {
                MessageBox(_T("Error-------1"));
                DestroyWindow();
                MessageBox(_T("Error-------3"));
                return FALSE;
        }
的话,则Error-------1和Error-------3对话框都会显示,然后再退出程序。说明CreateControl返回值为0;
所以关键还是CreateControl怎么用。谁能帮帮小弟,谢谢了!!!
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表