|
IE控件是否支持XP的Theme,说白了只是一个标记(Flag)而已。
* o. m0 W" b- Y( y2 ?1 Y7 b如果你使用了ATL的CAxWindow,那么打开Theme支持,只需要:& n; _* o8 d% N) s
) i7 E- `- Y( M+ A) | K9 W! f1 ]6 H
CAxWindow m_ax; // 创建的IE控件。; g' d& E" f ?0 A
3 T) Y% e0 r8 g& }# ?! I2 p6 C
CComPtr<IAxWinAmbientDispatch> spHost;
# c3 a) W. X1 c. {% N9 T+ {* \7 E m_ax.QueryHost(&spHost);
# p! O0 y7 L* @+ k spHost->put_DocHostFlags(( r: Z5 P' Q; C6 v
DOCHOSTUIFLAG_NO3DBORDER |
7 y' r( k; f* n9 ^+ Y1 C5 s3 ] DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);
; ?" l3 H) E! n
1 X, x5 r6 {2 o8 _9 I4 c- c3 q7 B# z其中我们最关心的是DOCHOSTUIFLAG_THEME标记,它表示我们希望打开XP的Theme支持。另一个重要的标志是DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE,它表示我们希望IE中的Form支持AutoComplete(自动完成)功能。$ c1 C$ {% \1 m9 ]
0 n- d) q5 A1 M- \ G# U7 y1 J3 F) R
如果你没有用ATL,那么事情就要麻烦一点。你需要实现IDocHostUIHandler接口(关于该接口的前因后果,参考msdn),注意其中的GetHostInfo方法,它要求返回一个DOCHOSTUIINFO。该结构体中的成员dwFlags,就是ATL中IAxWinAmbientDispatch接口中的DocHostFlags属性。
. W$ }0 w' P) O# \# w- Z ( `3 b% l1 R1 T0 j3 r2 Z
另外有个需要一提的细节是,如果你使用VC6,并且没有更新过Platform SDK,那么你很可能没有DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE、DOCHOSTUIFLAG_THEME常量。解决方案有二: 4 J; n+ h5 F/ F+ O7 C6 W1 R
6 q$ _0 s3 Y Q$ }% i1 W
1)安装一个新的Platform SDK,替换掉VC6默认的。* H& S" k8 X6 _: ~, q
2)简单一点,你自己定义一下这两个常量:
2 l8 J" C$ F' j' H K6 W #define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x4000
0 C; M6 c0 ]- \6 s #define DOCHOSTUIFLAG_THEME 0x40000 |
|