本文转载自我2004年在csdn发布的博客
问
张老师,您好!
看了您的老文章TWebBrowser
编程简述,觉得非常有帮助。
我现在碰到了一个难题, 请问怎么样编程控制一个联动的下拉列表呢?例如省、县联动的select,从外边用程序控制自动输入某些值,
期待您的帮助,
2004-10-14
答
1) 设置IHTMLSelectElement
接口的selectedIndex
属性可以改变选中的列表项。
2) 动态添加列表项。
先调用IHTMLDocument2::createElement
创建一个option
对象,
1
2
3
4
HRESULT createElement(
BSTR eTag, //标签名,可以是img, area, option(ie4), frame, iframe(ie5)
IHTMLElement **newElem //返回对象指针
);
再调用IHTMLSelectElement::add
将创建的option
对象添加到列表中
1
2
3
4
HRESULT add(
IHTMLElement *element,
VARIANT before //添加到哪个位置,VT_I4类型的VARIANT
);
更详细的内容参阅MSDN
。
3) 要操纵列表中每个项,先从IHTMLSelectElement
的item
属性得到列表项的集合,再通过IHTMLOptionElement
接口来操纵。下面的例子演示了如何将下拉列表每一项的文字添加到一个BSTR
数组pszOptText
中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
HRESULT GetOptions(IHTMLSelectElement *ppvSelect, BSTR *pszOptText, long *plItems)
{
IDispatch *ppvdispOption;
IHTMLOptionElement *ppvOption;
HRESULT hResult;
// 取得select对象中optoin对象的数目
ppvSelect->get_length(plItems);
for (long i=0;i<*plItems;i++)
{
// 获取IDispatch指针
_variant_t index = i;
hResult = ppvSelect->item( index, index, &ppvdispOption );
if FAILED(hResult)
{
return(hResult);
}
// 得到IHTMLOptionElement接口.
hResult = ppvdispOption->QueryInterface( IID_IHTMLOptionElement, (void **) &ppvOption);
ppvdispOption->Release();
if FAILED(hResult)
{
return(hResult);
}
// 把文字添加到BSTR数组.
hResult = ppvOption->get_text(&(pszOptText[i]));
ppvOption->Release();
if FAILED(hResult)
{
return(hResult);
}
}
return S_OK;
}