我使用的是使用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)。
它没有收到那个消息吗?
那么怎么做呢?如何在粘贴前清理文本?
WM_PASTE不是一个通知,而是一个命令。您将发送给EDIT控件以使其将剪贴板粘贴到控件中。
当然,web浏览器不是编辑框,所以不会以同样的方式进行编辑。您需要拦截IHtmlElement2。