在AxSHDocVw.AxWebBrowser中拦截Ctrl-V或WM_PASTE并进行清理

时间:2013-01-12 13:05:43

标签: .net axwebbrowser

我使用的是使用AxSHDocVw.AxWebBrowser的winform HTML编辑器。 用户正在将其他软件中的文本复制并粘贴到此控件中。 问题是,在粘贴 Ctrl-V 时,它添加了一些字体标记以保留格式。 我不想保留格式,它应该粘贴干净的文本而不进行格式化,或者至少不应该添加FONT标记。 我认为拦截 Ctrl-V 并在粘贴清理剪贴板文本之前。

所以,我尝试拦截WM_PASTE消息并用固定测试替换剪贴板内容(只是为了检查),如下所示

class myWB : AxSHDocVw.AxWebBrowser
{
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x302)     // Trap WM_PASTE:
        {
            Clipboard.Clear();
            Clipboard.SetText("some text");
            return;
        }
        base.WndProc(ref m);
    }
}

但它没有用。我在IF块之前添加了以下内容,以查看它是否正在接收WM_PASTE消息。

Debug.WriteLine(m.Msg);

在运行中,即使在多个 Ctrl-V 之后,我也没有在输出窗口中看到0x302(770)。

是否没有收到该消息?

然后是做什么的?如何在粘贴之前清理文本?

1 个答案:

答案 0 :(得分:2)

WM_PASTE不是通知,它是命令。您将发送到EDIT控件以将其粘贴到控件中。

当然,网络浏览器不是编辑框,因此不会以同样的方式进行。您需要拦截IHtmlElement2.onpaste事件。