|
IE控件是否支持XP的Theme,说白了只是一个标记(Flag)而已。) O/ h% P& R" C
如果你使用了ATL的CAxWindow,那么打开Theme支持,只需要:1 ]: a( J1 s+ x. z
( A, r7 A( i" U% j" p4 T
CAxWindow m_ax; // 创建的IE控件。
" d4 p) d( V- E# J7 }& x # v2 r# u" i! N$ Y
CComPtr<IAxWinAmbientDispatch> spHost;
q% O6 V! ^, X# m' R) { m_ax.QueryHost(&spHost);3 U. e7 p2 a" ~$ w2 f& b1 }
spHost->put_DocHostFlags(
. Q# N2 R: Y, k6 l7 N# u y DOCHOSTUIFLAG_NO3DBORDER | - R' m; ]1 O! L! j+ e& @, Y- x
DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);9 q/ q1 _' q$ U) i: g+ [) X8 B- }
/ x- W# R! G6 f# ~! ^
其中我们最关心的是DOCHOSTUIFLAG_THEME标记,它表示我们希望打开XP的Theme支持。另一个重要的标志是DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE,它表示我们希望IE中的Form支持AutoComplete(自动完成)功能。
& W+ k; a7 H: d f' p& q# v
6 t9 F7 `& K: v4 K- e5 h8 u如果你没有用ATL,那么事情就要麻烦一点。你需要实现IDocHostUIHandler接口(关于该接口的前因后果,参考msdn),注意其中的GetHostInfo方法,它要求返回一个DOCHOSTUIINFO。该结构体中的成员dwFlags,就是ATL中IAxWinAmbientDispatch接口中的DocHostFlags属性。
7 N) p3 k. S# o / `! {0 o! C' S& D3 @7 O/ J8 @; K$ _
另外有个需要一提的细节是,如果你使用VC6,并且没有更新过Platform SDK,那么你很可能没有DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE、DOCHOSTUIFLAG_THEME常量。解决方案有二: 7 B L! q5 V" `" D0 o0 ?3 p& A
, C- J4 C0 T( X3 D1)安装一个新的Platform SDK,替换掉VC6默认的。$ g9 n' w8 o* i I( L
2)简单一点,你自己定义一下这两个常量:
( E" `1 o/ X" n' |/ c2 ^ #define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x4000
( Y1 n- w0 Z! q$ ^: X #define DOCHOSTUIFLAG_THEME 0x40000 |
|