社区
网络及通讯开发
帖子详情
to ThinkX(思考中)你写的那个模板实在太好了。再送200分。不然我不爽!!
pp616
2003-03-02 02:46:29
如题
...全文
57
17
打赏
收藏
to ThinkX(思考中)你写的那个模板实在太好了。再送200分。不然我不爽!!
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rikky
2003-03-02
打赏
举报
回复
哈哈,贪心的人不少啊,多我一个不多啊
halibut
2003-03-02
打赏
举报
回复
让我拿点分吧!
RomanticProgrammer
2003-03-02
打赏
举报
回复
算我求你了总可以了吧....
RomanticProgrammer
2003-03-02
打赏
举报
回复
给我2分好吗?
我很可怜的...
invalid
2003-03-02
打赏
举报
回复
什么模版啊?
youer511
2003-03-02
打赏
举报
回复
我们也有吗?
那我就不拿白不拿了
pp616
2003-03-02
打赏
举报
回复
template代码
#include <vector>
#include "mshtml.h"
//可以清空由Com指针作为元素的stl容器的函数,如vector<IUnknown>, list<IHTMLElement>
template <class T>
void ClearInterface(T& v)
{
//遍历容器,然后Release其中的元素
for (T::iterator iter = v.begin(); iter != v.end(); ++iter)
{
if (*iter)
{
(*iter)->Release();
(*iter) = NULL;
}
}
v.clear();
}
//这是一个过滤Html元素的类,可以做为基类使用,
//其中只有一个函数Filter,如果它
//返回true,则将一个html元素加入到队列中,否则不加入
template <class T>
class HtmlElementFilter
{
public:
inline HtmlElementFilter() { }
virtual ~HtmlElementFilter() { }
virtual bool Filter(T*) { return true; }
};
//一个例子,用继承的方法使用HtmlElementFilter
template <class T>
class SimpleFilter : public HtmlElementFilter<T>
{
public:
inline SimpleFilter() { }
virtual ~SimpleFilter() { }
virtual bool Filter(T*) { return true; }
};
//另一个例子,用模板特化的方法使用HtmlElementFilter
//这个类可以过滤Anchor元素
template < >
class HtmlElementFilter<IHTMLAnchorElement>
{
public:
inline HtmlElementFilter() { }
virtual ~HtmlElementFilter() { }
virtual bool Filter(IHTMLAnchorElement*) { return true; }
};
//这个函数可以得到页面中某一个类型的元素集合,
//htmlDoc是html的IDispatch指针,可以用CppWebBrowser1->Document作为参数
//elements是返回的页面元素的集合
//filter就是上面介绍的过滤器,默认为NULL,不进行过滤
template <class T>
void GetHtmlElements(IDispatch* htmlDoc, //[in]
std::vector<T*>& elements, //[out]
HtmlElementFilter<T>* filter = 0 //[in]
)
{
if (htmlDoc == NULL) return;
//清空元素集合
ClearInterface(elements);
HRESULT hr;
//得到IHTMLDocument2的接口指针
IHTMLDocument2* hdoc2;
hr = htmlDoc->QueryInterface(__uuidof(IHTMLDocument2), (void**)&hdoc2);
if (SUCCEEDED(hr))
{
//得到元素集合
IHTMLElementCollection* hec;
hr = hdoc2->get_all(&hec);
if (SUCCEEDED(hr))
{
//得到元素集合的枚举器
IUnknown* unk1;
hr = hec->get__newEnum(&unk1);
if (SUCCEEDED(hr))
{
IEnumVARIANT* enumVar;
hr = unk1->QueryInterface(__uuidof(IEnumVARIANT), (void**)&enumVar);
if (SUCCEEDED(hr))
{
VARIANT elemVar;
//进行枚举
T* elem;
while (enumVar->Next(1, &elemVar, NULL) == S_OK)
{
//assert(elemVar.vt == VT_DISPATCH); //最好断言一下
//请求相应的元素,如果请求不成功,说明不是要求种类的元素
elemVar.pdispVal->QueryInterface(__uuidof(T), (void**)&elem);
if (SUCCEEDED(hr) && elem != NULL)
{
//过滤
if (filter)
{
if (filter->Filter(elem))
elements.push_back(elem);
else
elem->Release();
}
else
elements.push_back(elem);
}
VariantClear(&elemVar);
}
enumVar->Release();
}
unk1->Release();
}
hec->Release();
}
hdoc2->Release();
}
}
//=================
ThinkX
2003-03-02
打赏
举报
回复
对了:你不说我还忘了,那段代码有个漏洞,补上:
将GetHtmlElements函数中的
if (filter->Filter(elem))
elements.push_back(elem);
改为
if (filter->Filter(elem))
elements.push_back(elem);
else
elem->Release();
另外:
我感觉写一个通过element name/id 和index 进行过滤的Fliter是很用用的。
rh
2003-03-02
打赏
举报
回复
俺不要分,俺想看看那模版...
ThinkX
2003-03-02
打赏
举报
回复
谢谢 pp616
接分!!
myy
2003-03-02
打赏
举报
回复
蹭蹭蹭!
yeahchang
2003-03-02
打赏
举报
回复
就是就是
qdxby
2003-03-02
打赏
举报
回复
把摸班贴出来看看啊。
favorit
2003-03-02
打赏
举报
回复
binbin(俺又回来了(俺不是南霸天)...)说的,就是偶想说的
……………
everlasting
2003-03-02
打赏
举报
回复
什么模板?
binbin
2003-03-02
打赏
举报
回复
双星的家伙也来蹭分啊.
还是给俺几分吧.俺一个月没进帐了.
chinayang
2003-03-02
打赏
举报
回复
多关照关照..我们最底层的农民阶级吧
Thinkpad X280-EFI.zip
Thinkpad X280-EFI.zip
Thin
kx
200
XP安装资料整理
详细驱动安装list //ThinkPad_X
200
_74574AC_驱动程序安装一览表_for_XP_CN1、Intel主板驱动程序(Windows Vista/XP/
200
0)(设备管理器
中
显示为:SM总线控制器):http://think.lenovo.com.cn/support/driver/detail.aspx?docID=DR1221303651950&docTypeID=DOC_TYPE_DRIVER默认解压路径:C:/DRIVERS/WIN/INTELINF/INFINST_AUTOL.
开源啦!首个多感官数据训练平台;斯坦福CS224W·图机器学习课程;Thin
kX
系列新作,更易编程的贝叶斯思维;前沿论文 | ShowMeAI资讯日报
贝叶斯思维书籍(第二版)电子版、斯坦福CS224W · 图机器学习课程、麻省理工6.036 · 机器学习导论课程、基于Blender的图像标注工具、MASR流式与非流式语音识别项目、embetter嵌入工具、Xtreme1数据管理平台、数据集服务器、说话脸生成资源列表、医学影像自监督学习资源列表、前沿论文…点击获取全部资讯
如何使用全局变量
这本来是我的一个问题,谢谢Thin
kX
、blow_jj 、Maconel 、hy1080 的解答,现整理一下答案。使用全局变量应该将变量定义在.c
中
,在.h
中
extern。在需要使用变量的地方,包含.h就行了。还要注意自己给.h文件加些预编译,可以直接新建unit,预编译会自动生成。例如在global.cpp和global.h
中
定义全局变量在global.cpp
中
这样
写
:#include
Thinkpad等电脑
中
一些软件显示不正常,字体太小或拥挤或模糊
# 解决方法 1.找到软件位置,右键-属性 2.更改高dpi设置 3.选
中
替代高DPI缩放行为,并将缩放执行选为系统(增强) 4. 点击确定,再点击应用即可
网络及通讯开发
1,316
社区成员
8,873
社区内容
发帖
与我相关
我的任务
网络及通讯开发
C++ Builder 网络及通讯开发
复制链接
扫一扫
分享
社区描述
C++ Builder 网络及通讯开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章