|
|
IE控件是否支持XP的Theme,说白了只是一个标记(Flag)而已。
8 i$ O- U |4 T2 w. N2 L0 p如果你使用了ATL的CAxWindow,那么打开Theme支持,只需要:
/ ]! f, t, G, F+ n* A
- R# t3 k6 d) d. I( [5 o CAxWindow m_ax; // 创建的IE控件。
0 @# Z5 w/ w, p, ~! k' h* ]
4 ^7 w4 e5 G5 P# [) E6 C1 t; V3 j. Z CComPtr<IAxWinAmbientDispatch> spHost;
9 q* k# Q. S! U& A/ i6 ?" z& `' J. a0 O, y m_ax.QueryHost(&spHost);" \6 r% V/ Z& g' P2 e
spHost->put_DocHostFlags() H f1 ]1 T6 x+ ?& T: x: s: p
DOCHOSTUIFLAG_NO3DBORDER | ( i/ C' B. `$ ]0 |2 ~* L: X9 r0 g
DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);! p7 [6 D( j- X L
1 Z K+ z& w6 b2 v/ v! E其中我们最关心的是DOCHOSTUIFLAG_THEME标记,它表示我们希望打开XP的Theme支持。另一个重要的标志是DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE,它表示我们希望IE中的Form支持AutoComplete(自动完成)功能。
. D1 a, u/ n( F. g6 A6 Z 2 U7 w1 a5 @! r3 T# E/ u- {2 Y+ e. _
如果你没有用ATL,那么事情就要麻烦一点。你需要实现IDocHostUIHandler接口(关于该接口的前因后果,参考msdn),注意其中的GetHostInfo方法,它要求返回一个DOCHOSTUIINFO。该结构体中的成员dwFlags,就是ATL中IAxWinAmbientDispatch接口中的DocHostFlags属性。
$ g8 H$ Y, E, v$ ?" u+ P
6 q7 q! l) q3 X$ h# Z另外有个需要一提的细节是,如果你使用VC6,并且没有更新过Platform SDK,那么你很可能没有DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE、DOCHOSTUIFLAG_THEME常量。解决方案有二:
6 P: z3 r% ^% X: e1 \, P" p) G
- i- \* G( I4 @0 W0 l+ D1)安装一个新的Platform SDK,替换掉VC6默认的。0 M" T, w$ j( `/ E. j
2)简单一点,你自己定义一下这两个常量:; v& ^8 v: J8 x; @
#define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x40006 K0 F2 g" r4 N
#define DOCHOSTUIFLAG_THEME 0x40000 |
|