gpt4 book ai didi

c++ - 寻找 C++ 的 MSHTML 包装器

转载 作者:行者123 更新时间:2023-11-28 00:35:50 26 4
gpt4 key购买 nike

我最近在使用 MSHTML API,我发现它很不方便。我更习惯于 WinAPI 而不是 COM 编程,所以也许这只是我,但请考虑以下查询元素矩形的示例;

期望:

RECT rc;
hr = element2->GetElementRect(&rc);

现实:

CComPtr<IHTMLRect> rect;
hr = element2->getBoundingClientRect(&rect);
if(FAILED(hr))
return hr;
if(!rect)
return E_FAIL;

long left, right, top, bottom;
hr = rect->get_left(&left);
if(FAILED(hr))
return hr;
hr = rect->get_right(&right);
if(FAILED(hr))
return hr;
hr = rect->get_top(&top);
if(FAILED(hr))
return hr;
hr = rect->get_bottom(&bottom);
if(FAILED(hr))
return hr;

我错过了什么吗?

我的问题:这个 API 是否有包装器?当然,诸如 CComPtr 之类的智能指针可以让事情变得容易得多,但我仍然觉得自己在使用 API 上苦苦挣扎。

最佳答案

一种方法是使用 #import指令并使用 native C++ 编译器 COM 支持类而不是 ATL(例如 _com_ptr_t<>)。

然后您的代码归结为 2 行代码:

MSHTML::IHTMLElement2Ptr element;

MSHTML::IHTMLRectPtr rect = element->getBoundingClientRect();
RECT rc = { rect->left, rect->top, rect->right, rect->bottom };

像这样导入 mshtml 内容:

#pragma warning(push)
// warning C4192: automatically excluding '<xyz>' while importing type library 'mshtml.tlb'
#pragma warning(disable: 4192)
#import <mshtml.tlb>
#pragma warning(pop)

所有样板代码都被隐藏了,因为#import自动创建进行 HRESULT 检查的属性包装器和方法。

关于c++ - 寻找 C++ 的 MSHTML 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20995058/

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