HOWTO让IWebBrowser2使用剪切/复制编辑。 [英] HOWTO get IWebBrowser2 to use Cut/Copy editing.

查看:61
本文介绍了HOWTO让IWebBrowser2使用剪切/复制编辑。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


HOWTO让IWebBrowser使用剪切/复制编辑。



请帮忙,



我在VC ++对话框中使用IWebBrowser2控件。标准HTML控件,例如< input type = text>不要让用户剪切/复制文本。奇怪的是,粘贴操作确实有效。



我知道2006年的文章叫做:


Bill是否忘记了WebBrowser控件的document.selection?



链接: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=666932& ; SiteId = 1



我也知道有关MSDNML编辑功能的MSDN文章。


我知道document.designMode =" On"。



< p align = left>但没有任何效果。



我认为答案必须围绕以下事项之一:



1)在OnInitDialog中,调用 IWebBrowser2的控件来执行某些操作。


------我试过这个用 m_spHtmlDoc - > ; put_designMode (( BSTR " CBStr "开" ))



2)向HTML中添加一些内容,就像< body>中的onload一样。元素本身:


-----< ; body onload ='document.designMode =" On" ;;'>



3)添加每个< input>,< textarea>的额外逻辑我希望剪切/复制的其他HTML控件。



解决方案

我有更多信息。



我还尝试过MSDN文档来调用 DISPID_AMBIENT_USERMODE,这也不起作用。



顺便说一下,要重现问题,请构建一个基于 CDHtmlDialog的简单MFC示例对话框。然后在OnInitDialog中,添加以下代码:



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



在CDHtmlDialog之后添加到OnInitDialog :: OnInitDialog ();




SAFEARRAYBOUND SAFEARRAYBOUND_Temp ;


SAFEARRAYBOUND_Temp cElements = 1 ;


SAFEARRAYBOUND_Temp lLbound = 0 ;

< font size = 2>

COleSafeArray COleSafeArray_Temp ;


COleSafeArray_Temp 创建 VT_VARIANT 1 & SAFEARRAYBOUND_Temp );


_variant_t _variant_t_Temp ;


_variant_t_Temp = L "< html>< input type = text value = \"尝试复制我!!! \">< / html>" ;


LONG LONG_Temp < font color ="#ff0000"size = 2> = 0 ;


COleSafeArray_Temp PutElement (& LONG_Temp < font color ="#ff0000"size = 2>, & _variant_t_Temp );


IDispatch * pIDispatch = NULL ;


m_pBrowserApp - > get_Document (& pIDispatch );


IHTMLDocument2 * pIHTMLDocument2 = NULL ;


IHTMLDocument3 * pIHTMLDocument3 = NULL ;


pIDispatch - > QueryInterface IID_IHTMLDocument2 void **) & pIHTMLDocument2 );


pIDispatch - > QueryInterface IID_IHTMLDocument3 void **) < font color ="#ff0000"size = 2>& pIHTMLDocument3 );


pIHTMLDocument2 - > write COleSafeArray_Temp parray );


pIHTMLDocument2 - > close ();




 

HOWTO get IWebBrowser to use Cut/Copy editing.

 

Please help,

 

I am using the IWebBrowser2 control in a VC++ dialog. Standard HTML controls like <input type=text> do not let the user cut/copy text from them. Strangely, paste operations do work.

 

I am aware of the article from 2006 called:

Did Bill forget document.selection for WebBrowser control?

 

Link: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=666932&SiteId=1

 

I'm also aware of the MSDN article on making MSHTML edit capable.

And I am aware of the document.designMode = "On".

 

But nothing works.

 

I envision the answer must revolve around one of these things:

 

1) In the OnInitDialog, a call to the IWebBrowser2's control to do something.

------  I have tried this with m_spHtmlDoc->put_designMode((BSTR) CBStr("On"))

 

2) Add something to the HTML like an onload inside the <body> element as such:

----- <body onload='document.designMode = "On";'>

 

3) Adding extra logic to each and every <input>, <textarea> and other HTML controls I desire cut/copy with.

 

 

解决方案

I have more information.

 

I have also tried the MSDN documentation's to invoke DISPID_AMBIENT_USERMODE, and that didn't work either.

 

By the way, to reproduce the problem, build a simple MFC sample dialog based around CDHtmlDialog. Then in the OnInitDialog, add this code:

 

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

 

Add to OnInitDialog after the CDHtmlDialog::OnInitDialog();

 

 

SAFEARRAYBOUND SAFEARRAYBOUND_Temp;

SAFEARRAYBOUND_Temp.cElements = 1;

SAFEARRAYBOUND_Temp.lLbound = 0;

COleSafeArray COleSafeArray_Temp;

COleSafeArray_Temp.Create(VT_VARIANT, 1, &SAFEARRAYBOUND_Temp);

_variant_t _variant_t_Temp;

_variant_t_Temp = L"<html><input type=text value=\"Try to copy me!!!\"></html>";

LONG LONG_Temp = 0;

COleSafeArray_Temp.PutElement(&LONG_Temp, &_variant_t_Temp);

IDispatch *pIDispatch = NULL;

m_pBrowserApp->get_Document(&pIDispatch);

IHTMLDocument2 *pIHTMLDocument2 = NULL;

IHTMLDocument3 *pIHTMLDocument3 = NULL;

pIDispatch->QueryInterface(IID_IHTMLDocument2, (void **) &pIHTMLDocument2);

pIDispatch->QueryInterface(IID_IHTMLDocument3, (void **) &pIHTMLDocument3);

pIHTMLDocument2->write(COleSafeArray_Temp.parray);

pIHTMLDocument2->close();

 

 


这篇关于HOWTO让IWebBrowser2使用剪切/复制编辑。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆