|
IE控件是否支持XP的Theme,说白了只是一个标记(Flag)而已。
, v0 l; N( H2 B! ?+ }; w' w6 h如果你使用了ATL的CAxWindow,那么打开Theme支持,只需要:
' i. J* X. Z5 g7 h1 Q# } . M1 H$ O7 ^5 b
CAxWindow m_ax; // 创建的IE控件。9 r) `% H, v- |$ U
' @5 Y5 |, `( P( J- x. n$ M5 p CComPtr<IAxWinAmbientDispatch> spHost;$ U& Q: s4 a: v" |1 K& u
m_ax.QueryHost(&spHost); I* J) `2 b* K7 m* \
spHost->put_DocHostFlags(
& V* R" j1 O" \7 f: s) E, n DOCHOSTUIFLAG_NO3DBORDER | 2 E' y7 O, Q) c# [
DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);
6 l u7 s& d9 t
7 ~3 F+ W9 B# H; }3 ^+ G* L其中我们最关心的是DOCHOSTUIFLAG_THEME标记,它表示我们希望打开XP的Theme支持。另一个重要的标志是DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE,它表示我们希望IE中的Form支持AutoComplete(自动完成)功能。& M8 L7 _4 Y- Z2 |: z7 I
$ r$ }! V$ R* ?" N" ]" W5 @. {如果你没有用ATL,那么事情就要麻烦一点。你需要实现IDocHostUIHandler接口(关于该接口的前因后果,参考msdn),注意其中的GetHostInfo方法,它要求返回一个DOCHOSTUIINFO。该结构体中的成员dwFlags,就是ATL中IAxWinAmbientDispatch接口中的DocHostFlags属性。& q7 M5 r2 f! Z9 P
8 B. P9 W" [& l1 C
另外有个需要一提的细节是,如果你使用VC6,并且没有更新过Platform SDK,那么你很可能没有DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE、DOCHOSTUIFLAG_THEME常量。解决方案有二: 9 r6 g1 M1 W5 ]- T( M/ i
8 K8 J( e3 P( A n1)安装一个新的Platform SDK,替换掉VC6默认的。6 Z% C4 q v# U* {$ y2 F6 F
2)简单一点,你自己定义一下这两个常量:
3 g( J1 @. _& S- H4 `( M0 M. X% B #define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x4000* P, K: v& E2 o7 V1 k8 Y
#define DOCHOSTUIFLAG_THEME 0x40000 |
|