IWebBrowser2绑定到我的WIN32窗体上去

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IWebBrowser2绑定到我的WIN32窗体上去相关的知识,希望对你有一定的参考价值。

IWebBrowser2绑定到窗口:用这个COM创建出来的是一个独立的窗口
现在要绑定到我的WIN32窗体上去,也就是把网页放在窗体上,作为子窗口
bool CMyInternetExplorer::CreateNewInstance (HWND hWnd,CRect rc)

if (m_pWebBrowser != NULL)
Quit();

IWebBrowser2* pWebBrowser = NULL;
HRESULT hr = CoCreateInstance (CLSID_InternetExplorer, NULL, CLSCTX_SERVER, IID_IWebBrowser2, (LPVOID*)&pWebBrowser);

if (SUCCEEDED (hr) && (pWebBrowser != NULL))

m_pWebBrowser = pWebBrowser;
m_pWebBrowser->put_Left(rc.left);
m_pWebBrowser->put_Top(rc.top);
m_pWebBrowser->put_Width(rc.right-rc.left);
m_pWebBrowser->put_Height(rc.bottom-rc.top);

m_pWebBrowser->put_MenuBar(VARIANT_FALSE);
m_pWebBrowser->put_ToolBar(VARIANT_FALSE);
m_pWebBrowser->put_StatusBar(VARIANT_FALSE);
m_pWebBrowser->put_Visible (VARIANT_TRUE);
return true;

if (pWebBrowser)

pWebBrowser->Quit();
pWebBrowser->Release();

return false;

我有天看过,应该放到容器里,然后显示出来

放到指定的区域
想绑定相应的窗口

你看下我的代码是怎么创建的


CMyWebBrowserDlg::OnInitDialog


在MFC里就这样最方便了~~如果你是纯SDK写的窗口,那就要跟一下m_myWebBrowser.CreateControl里面的子流程,我简单跑了下,还是比较复杂的…还是MFC简单点


=======================

对了,m_myWebBrowser.SetParent( this );是我自己测试用的,实际并不需要这个代码,因为在CreateControl的时候就指定了父窗口了~

参考技术A 用CAxWindow创建容器可以解决。

将异步数据从网页传递到我的窗体 C# .NET 应用程序

【中文标题】将异步数据从网页传递到我的窗体 C# .NET 应用程序【英文标题】:Passing asynchronous data from a web page to my window form C# .NET application 【发布时间】:2015-05-07 22:55:53 【问题描述】:

我想让一个网页能够与基于 C# .NET Windows 窗体应用程序的软件电话实现进行通信(异步)。理想情况下,任何电话号码附近的按钮都应将包括电话号码和一些附加数据的字符串发送到本地运行的软件电话。 Windows 窗体应接收该号码并使用它拨打电话。 呼叫的结束应传达回最初启动呼叫的网页。 作为 .NET 编程的初学者,哪种实现可以最简单、最轻松地满足这些要求?我专注于 ASP .NET,但它真的有帮助吗?非常感谢

【问题讨论】:

我认为您对软件架构应该如何工作有很大的困惑和误解。您无法从网页控制 Windows 客户端应用程序(任何技术),反之亦然。 ASP.NET 或 ASP.NET Web Api 将是您的奴隶,而电话或客户端应用程序将是您的主人。你认为网页是如何感知手机的? 感谢您的回答。抱歉,我只在高层次上解释了该机制应该如何工作。我当然不会假装从网页控制手机客户端应用程序。只是在寻找一种方法来使其成为可能,就像 Skype 在某些网页中所做的那样。单击后,拨打电话的软件电话应用程序将检索电话号码。手机必须知道网页上发生了什么。 看我的回答。试试 SignalR 我看到一个实现足以从页面调用 href="sip:" 格式的 href 以将号码转发到软电话客户端应用程序。我想知道如何实现这一点 您的应用需要在浏览器上注册一个协议处理程序,这取决于不同的浏览器。即 Mozilla developer.mozilla.org/en/docs/Web-based_protocol_handlers。即:msdn.microsoft.com/en-us/library/ie/… 【参考方案1】:

你应该看看SignalR。这是一个用于实时网络通信的库。

您可以在自己的进程中托管 SignalR 应用程序(自托管)或在您的 IIS Web 服务器中托管它。

您的网站和您的 .NET WinForm 应用程序都连接到它。您可以使用SignalR groups 将网站用户关联到 WinForms 客户端。

然后您可以从您的网站向 SignalR 发送消息并将其广播到某个组(您的 WinForm 应用程序所属的组)。

ASP.NET 网站上有很多教程。

http://www.asp.net/signalr/overview/getting-started

只要 SignalR/您的 ASP.NET 网站不是本地托管的,这也应该适用于 WinPhone 应用程序。

编辑: 只是一些额外的信息: SingalR 需要 Windows Server 2012 或更高版本才能启用 WebSocket 支持,否则它将不得不回退到替代机制(HTML 5 的服务器发送事件或“Forever Frame”/Ajax 长轮询

【讨论】:

【参考方案2】:

服务器端技术和客户端技术完全不相关,因为浏览器将处于中间位置。 一种可能性是在您单击电话号码时从网站返回具有自定义扩展名的文件。文件扩展名可以在本地操作系统中(通过安装程序)与客户端应用程序链接,因此它将通过您的软电话应用程序自动打开。

此文件可以包含任何数据结构,其中包含您要传输的所有信息。 (寻找“xml序列化”)

编辑: 此解决方案使您独立于操作系统中的 sip 协议处理程序 (set sip handler application in registry),并允许转发有关被呼叫人的更多信息,而不仅仅是号码。

【讨论】:

以上是关于IWebBrowser2绑定到我的WIN32窗体上去的主要内容,如果未能解决你的问题,请参考以下文章

python pywin32 里面操作窗体,获取窗体里面的数据,在函数GetDlgItem函数中,怎么获取第二个参数的值?

控制窗体的显示和隐藏

C#通过WIN32 API实现嵌入程序窗体

python 控制窗体的显示和隐藏

使用WIN32汇编语言实现一个基本windows窗体的过程分析

ole32.dll 异常后的 iWebBrowser::Navigate 死锁