|
|
IE控件是否支持XP的Theme,说白了只是一个标记(Flag)而已。" K8 X4 m2 u4 c& B
如果你使用了ATL的CAxWindow,那么打开Theme支持,只需要:
4 [5 \" ^- q" |' x" Q5 A
# k# _1 {! E% W7 R CAxWindow m_ax; // 创建的IE控件。
1 a& n2 O$ U1 E0 e# `. ~% m
3 x$ T; B4 `2 g+ ^ CComPtr<IAxWinAmbientDispatch> spHost;
( I% F0 y, o) j) h* E0 a m_ax.QueryHost(&spHost);! @* M# g% I. V) o: H6 d2 V: a
spHost->put_DocHostFlags(
# e2 z7 F* X. F. @; t, v DOCHOSTUIFLAG_NO3DBORDER |
; N) L$ V. V7 {7 o1 D% X DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);
! N9 T/ ]! T c j2 S 4 u, R/ ^+ S; v" C7 M( |- t
其中我们最关心的是DOCHOSTUIFLAG_THEME标记,它表示我们希望打开XP的Theme支持。另一个重要的标志是DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE,它表示我们希望IE中的Form支持AutoComplete(自动完成)功能。
. V7 x9 O% Z Z/ m6 T3 {
& L9 [( a2 D; Y) O A' x& A3 W8 b如果你没有用ATL,那么事情就要麻烦一点。你需要实现IDocHostUIHandler接口(关于该接口的前因后果,参考msdn),注意其中的GetHostInfo方法,它要求返回一个DOCHOSTUIINFO。该结构体中的成员dwFlags,就是ATL中IAxWinAmbientDispatch接口中的DocHostFlags属性。
: c0 r* }, {( z3 u) l; N4 q
+ X* _1 Z0 H' K+ l/ b5 v另外有个需要一提的细节是,如果你使用VC6,并且没有更新过Platform SDK,那么你很可能没有DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE、DOCHOSTUIFLAG_THEME常量。解决方案有二: 4 v [- \4 q* E9 S: L9 _
/ J' S* H" {- m) |1)安装一个新的Platform SDK,替换掉VC6默认的。
, k2 L5 d" F6 {* K2)简单一点,你自己定义一下这两个常量:' \' ?2 p! F" }. M. K |7 ?
#define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x4000' d# Z* H, d" K& z
#define DOCHOSTUIFLAG_THEME 0x40000 |
|