手机html粘贴事件,在HtmlEditor WinForms上拦截粘贴事件

我整天都在研究这个问题,最后找到了解决方案。尝试侦听WM_PASTE消息不起作用,因为基础mshtml控件正在对Ctrl-V进行预处理。您可以侦听OnKeyDown / Up等以捕获Ctrl-V,但这不会阻止底层控件继续其默认的粘贴行为。我的解决方案是阻止Ctrl-V消息的预处理,然后实现我自己的粘贴行为。要从PreProcessing CtrlV消息中停止控制,我必须继承我的Control,即AxWebBrowser,

public class DisabledPasteWebBrowser : AxWebBrowser

{

const int WM_KEYDOWN = 0x100;

const int CTRL_WPARAM = 0x11;

const int VKEY_WPARAM = 0x56;

Message prevMsg;

public override bool PreProcessMessage(ref Message msg)

{

if (prevMsg.Msg == WM_KEYDOWN && prevMsg.WParam == new IntPtr(CTRL_WPARAM) && msg.Msg == WM_KEYDOWN && msg.WParam == new IntPtr(VKEY_WPARAM))

{

// Do not let this Control process Ctrl-V, we'll do it manually.

HtmlEditorControl parentControl = this.Parent as HtmlEditorControl;

if (parentControl != null)

{

parentControl.ExecuteCommandDocument("Paste");

}

return true;

}

prevMsg = msg;

return base.PreProcessMessage(ref msg);

}

}

这是我处理粘贴命令的自定义方法,您可以使用剪贴板中的图像数据执行类似操作。

internal void ExecuteCommandDocument(string command, bool prompt)

{

try

{

// ensure command is a valid command and then enabled for the selection

if (document.queryCommandSupported(command))

{

if (command == HTML_COMMAND_TEXT_PASTE && Clipboard.ContainsImage())

{

// Save image to user temp dir

String imagePath = Path.GetTempPath() + "\" + Path.GetRandomFileName() + ".jpg";

Clipboard.GetImage().Save(imagePath, System.Drawing.Imaging.ImageFormat.Jpeg);

// Insert image href in to html with temp path

Uri uri = null;

Uri.TryCreate(imagePath, UriKind.Absolute, out uri);

document.execCommand(HTML_COMMAND_INSERT_IMAGE, false, uri.ToString());

// Update pasted id

Guid elementId = Guid.NewGuid();

GetFirstControl().id = elementId.ToString();

// Fire event that image saved to any interested listeners who might want to save it elsewhere as well

if (OnImageInserted != null)

{

OnImageInserted(this, new ImageInsertEventArgs { HrefUrl = uri.ToString(), TempPath = imagePath, HtmlElementId = elementId.ToString() });

}

}

else

{

// execute the given command

document.execCommand(command, prompt, null);

}

}

}

catch (Exception ex)

{

// Unknown error so inform user

throw new HtmlEditorException("Unknown MSHTML Error.", command, ex);

}

}

希望有人觉得这很有帮助,不要像今天这样浪费一天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值