gpt4 book ai didi

c++ - MSHTML:图像插入回调

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:28 25 4
gpt4 key购买 nike

目前,我正在使用 MSHTML 组件将 HTML 编辑器嵌入到 C++ WinAPI 应用程序中。

我已设置好所有内容(激活编辑模式、更改字体等),但现在我必须支持插入图像。 MSHTML 已经内置了对它的支持,但据我所知,这种支持还不够。

我需要一种方法来拦截将图像插入到 HTML 编辑器中,因为我必须在应用程序的 UI 中创建图像列表。因此,每当用户使用 MSHTML 组件的默认对话框插入图像或更新其来源(例如从 file://xyz.jpg 到 file://abc.jpg)时,我希望我的代码得到通知.

我已经看过“编辑设计器”的概念、IHTMLEditHost 的实现或 DWebBrowserEvents2 接口(interface)。但似乎没有什么能解决问题。

也许有人可以给我提示?

最佳答案

好的,

看起来您无法明确订阅文档的特定更改。您可以做的是创建一个所谓的“Change Sink”。

每次您更改文档时,无论是通过用户输入还是以编程方式,您都会收到通知,告知您文档中的“某些内容”发生了更改。这可以通过实现 IHTMLChangeSink 来完成接口(interface)并将其附加到 IMarkupContainer2 IHTMLDocument2 的。

示例代码(不完整):

class CHTMLChangeSink : public IHTMLChangeSink
{
public:
// Implement IUnknown: QueryInterface, AddRef, Release
// Implement IHTMLChangeSink:
HRESULT STDMETHODCALLTYPE Notify()
{
// Notify() is called everytime the document changes
return S_OK;
}
};

CHTMLChangeSink * pChangeSink = new CHTMLChangeSink();
IHTMLDocument2 * pDoc; // lets suppose we already have it
IMarkupContainer2 * pMarkupContainer = nullptr;
if (pDoc->QueryInterface(IID_IMarkupContainer2, reinterpret_cast<void **>(&pMarkupContainer)) == S_OK) {
DWORD dwCookie = 1;
// registration is done here
pMarkupContainer->RegisterForDirtyRange(pChangeSink, &dwCookie);
}

请注意,文档必须完全加载(注册 DIID_DWebBrowserEvents2::DocumentComplete)。

从现在开始,只要文档发生变化,您的 Notify 方法就会被调用,您可以做进一步的处理以找出发生了什么变化(例如处理文档中的图像列表)。

玩得开心!

关于c++ - MSHTML:图像插入回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25310836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com