|
IE控件是否支持XP的Theme,说白了只是一个标记(Flag)而已。7 M- `' H' }* a) [
如果你使用了ATL的CAxWindow,那么打开Theme支持,只需要:# j" X$ B/ P. n c9 g3 E: O* m
! M/ X& F+ H% Y" o- q" V CAxWindow m_ax; // 创建的IE控件。2 V6 [8 {& r' G
' s" h& k) N- [8 T( X- f CComPtr<IAxWinAmbientDispatch> spHost;: h/ X% y7 I8 P/ X7 R5 B
m_ax.QueryHost(&spHost);* C$ z$ |) c' j$ H' B" X4 o. e
spHost->put_DocHostFlags(
! k" H6 {2 @8 p+ e0 S1 y7 c4 ^" e6 u DOCHOSTUIFLAG_NO3DBORDER |
+ a: n& }$ f" V. f DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);
; v' I& U; D J3 [5 a( w; H% A
2 y5 O- N* w# m其中我们最关心的是DOCHOSTUIFLAG_THEME标记,它表示我们希望打开XP的Theme支持。另一个重要的标志是DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE,它表示我们希望IE中的Form支持AutoComplete(自动完成)功能。* K+ r, _9 Q' ^$ U& M B
# v6 V! `$ w2 q4 v0 `
如果你没有用ATL,那么事情就要麻烦一点。你需要实现IDocHostUIHandler接口(关于该接口的前因后果,参考msdn),注意其中的GetHostInfo方法,它要求返回一个DOCHOSTUIINFO。该结构体中的成员dwFlags,就是ATL中IAxWinAmbientDispatch接口中的DocHostFlags属性。
9 l, M7 B4 _1 D4 g1 S
0 b' J- @1 J. g% Z G7 A" B" Q另外有个需要一提的细节是,如果你使用VC6,并且没有更新过Platform SDK,那么你很可能没有DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE、DOCHOSTUIFLAG_THEME常量。解决方案有二: ; `; n9 c9 q" w% L( w) W. l
' w% U: C$ g1 o; q8 I
1)安装一个新的Platform SDK,替换掉VC6默认的。
+ a/ k( P! U7 c! y# m6 d2)简单一点,你自己定义一下这两个常量:
3 \$ \, r; r7 J9 G B #define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x4000
- ?! h. y8 F: A0 w- i2 g #define DOCHOSTUIFLAG_THEME 0x40000 |
|