|
|
IE控件是否支持XP的Theme,说白了只是一个标记(Flag)而已。3 F: A& ?$ Z) p) A4 L H
如果你使用了ATL的CAxWindow,那么打开Theme支持,只需要:; |( K$ j7 _. ]9 j8 C
! y: ?% w# {# I$ a ` ?
CAxWindow m_ax; // 创建的IE控件。) \! A9 e) g9 f6 H! N
( d+ z# Z2 l# O9 g1 {
CComPtr<IAxWinAmbientDispatch> spHost;: p u9 K: j% t. v& } J5 v5 t% C
m_ax.QueryHost(&spHost);
3 T- e; Y, U* u7 a4 g$ U5 O spHost->put_DocHostFlags(
/ o1 j. |$ s, d% I% ? DOCHOSTUIFLAG_NO3DBORDER | * J$ A. L2 n$ z
DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);, ~1 W9 t: |0 I; q L
@, t* h( u6 n6 a/ M
其中我们最关心的是DOCHOSTUIFLAG_THEME标记,它表示我们希望打开XP的Theme支持。另一个重要的标志是DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE,它表示我们希望IE中的Form支持AutoComplete(自动完成)功能。
" F* ]0 V) N6 W9 C4 x
2 a, t" J. ^9 G3 y5 I- i如果你没有用ATL,那么事情就要麻烦一点。你需要实现IDocHostUIHandler接口(关于该接口的前因后果,参考msdn),注意其中的GetHostInfo方法,它要求返回一个DOCHOSTUIINFO。该结构体中的成员dwFlags,就是ATL中IAxWinAmbientDispatch接口中的DocHostFlags属性。* P# N- A9 s7 v' D# R" T1 }% _
: h& K( Q8 N" c$ Z另外有个需要一提的细节是,如果你使用VC6,并且没有更新过Platform SDK,那么你很可能没有DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE、DOCHOSTUIFLAG_THEME常量。解决方案有二:
8 @1 w" V/ N8 K' H
3 ^4 y/ p+ Q2 n Z% k& B8 Q1)安装一个新的Platform SDK,替换掉VC6默认的。, K' [0 O( _4 @) H0 f% t( m
2)简单一点,你自己定义一下这两个常量:
; ^5 X: \% n* R9 \ #define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x4000
; ~ W7 C( u4 b, Y% o1 ~ #define DOCHOSTUIFLAG_THEME 0x40000 |
|