|
|
IE控件是否支持XP的Theme,说白了只是一个标记(Flag)而已。) c, u1 X' E& u5 L9 Q
如果你使用了ATL的CAxWindow,那么打开Theme支持,只需要:
0 Y V& W& @6 i4 \* Y * W: R* a u7 n6 V7 Y4 \
CAxWindow m_ax; // 创建的IE控件。
$ q" L# @) O1 W, |. o j0 d* L( L 1 r- v$ T1 U% j" [6 x0 {: r& q
CComPtr<IAxWinAmbientDispatch> spHost;) y: n' X0 J+ E5 S c3 R
m_ax.QueryHost(&spHost);
) E1 i- ~# v) o; {! M spHost->put_DocHostFlags(7 v4 U; @0 ]* I, k* G6 V# H
DOCHOSTUIFLAG_NO3DBORDER |
$ E- R: j$ T% r: M* x6 Y' D& S DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);/ K7 i7 u- K5 {+ Q
1 j6 F- q' y4 e
其中我们最关心的是DOCHOSTUIFLAG_THEME标记,它表示我们希望打开XP的Theme支持。另一个重要的标志是DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE,它表示我们希望IE中的Form支持AutoComplete(自动完成)功能。) Q. Y3 |$ o, k! `3 ~* E; \& z
7 c; e5 Q* p! k8 P: F
如果你没有用ATL,那么事情就要麻烦一点。你需要实现IDocHostUIHandler接口(关于该接口的前因后果,参考msdn),注意其中的GetHostInfo方法,它要求返回一个DOCHOSTUIINFO。该结构体中的成员dwFlags,就是ATL中IAxWinAmbientDispatch接口中的DocHostFlags属性。2 Y5 N7 \4 U; C+ n+ x0 M
- ` V! N8 \4 x' U
另外有个需要一提的细节是,如果你使用VC6,并且没有更新过Platform SDK,那么你很可能没有DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE、DOCHOSTUIFLAG_THEME常量。解决方案有二: . U8 J4 x" m8 k2 M. v
: M, X" t9 c: K; O1)安装一个新的Platform SDK,替换掉VC6默认的。* c7 C4 V9 Q/ S* S( ?+ u
2)简单一点,你自己定义一下这两个常量:
1 b- |- F9 r( T1 l" d1 L0 s; Z #define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x40009 B/ J( E: V! W' {/ {! q2 G0 d- h
#define DOCHOSTUIFLAG_THEME 0x40000 |
|