|
|
IE控件是否支持XP的Theme,说白了只是一个标记(Flag)而已。# n7 @) u8 }# C. w& Z9 I8 C
如果你使用了ATL的CAxWindow,那么打开Theme支持,只需要:- N5 P% w5 r% b* ]: a- b
: f0 q+ q Y; U3 {4 d6 U CAxWindow m_ax; // 创建的IE控件。3 B; _- A; T# v$ \1 i) R
+ M+ m8 T; p( E, }5 l CComPtr<IAxWinAmbientDispatch> spHost;
4 J( s& x! P+ l! @ Z m_ax.QueryHost(&spHost);
% \5 U$ Y5 y0 ~ C7 H* d spHost->put_DocHostFlags(
0 G# v# v( j; v4 {/ g! [* N DOCHOSTUIFLAG_NO3DBORDER |
. F4 U! s9 s1 B B DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);
* P& o+ x' i0 G( ]: f/ z
8 i: O0 e. |: H+ H3 v% J( J$ e/ K其中我们最关心的是DOCHOSTUIFLAG_THEME标记,它表示我们希望打开XP的Theme支持。另一个重要的标志是DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE,它表示我们希望IE中的Form支持AutoComplete(自动完成)功能。
$ I( H. z7 f- h, E9 Q6 ] y4 E& W8 o% \5 J5 `
如果你没有用ATL,那么事情就要麻烦一点。你需要实现IDocHostUIHandler接口(关于该接口的前因后果,参考msdn),注意其中的GetHostInfo方法,它要求返回一个DOCHOSTUIINFO。该结构体中的成员dwFlags,就是ATL中IAxWinAmbientDispatch接口中的DocHostFlags属性。2 t0 {6 R( G- E* N6 H, Z, \
4 t8 B( \) L2 b; ]3 A# e) d
另外有个需要一提的细节是,如果你使用VC6,并且没有更新过Platform SDK,那么你很可能没有DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE、DOCHOSTUIFLAG_THEME常量。解决方案有二:
7 Q8 |: Z# G% ~& q
+ O' h% U7 R, g& N3 P1)安装一个新的Platform SDK,替换掉VC6默认的。, S+ g8 k$ j4 m% F
2)简单一点,你自己定义一下这两个常量:! V: \5 W2 e2 q. p8 j8 ] w Z
#define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x4000! g# v5 |' u0 Z* j% L
#define DOCHOSTUIFLAG_THEME 0x40000 |
|