|
|
IE控件是否支持XP的Theme,说白了只是一个标记(Flag)而已。
) l: | T) Y S) |2 A' z4 D如果你使用了ATL的CAxWindow,那么打开Theme支持,只需要:
% L) W& ]$ ?! ?7 d) h" c2 }
7 e& r$ g8 i$ U& _ CAxWindow m_ax; // 创建的IE控件。
4 k+ g( y$ a" O: J5 [: A" \( Q8 T ' p5 Y+ n8 `- B/ k9 p! z
CComPtr<IAxWinAmbientDispatch> spHost;
, Y' @4 b6 D) H0 m( r. W' }! G m_ax.QueryHost(&spHost);
8 T5 b" i% k: p; m+ r8 Z) B* f spHost->put_DocHostFlags(
3 K/ Y; t2 g% Y/ I1 s( s* R! D% {" Y DOCHOSTUIFLAG_NO3DBORDER | / L& ~" o( s$ K' _
DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE | DOCHOSTUIFLAG_THEME);
7 x0 j6 ~" R; ]; P2 _ * b! w' J; w$ E+ P- {9 [' [
其中我们最关心的是DOCHOSTUIFLAG_THEME标记,它表示我们希望打开XP的Theme支持。另一个重要的标志是DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE,它表示我们希望IE中的Form支持AutoComplete(自动完成)功能。- o. y/ H* q* M: ~$ [
2 ]/ @8 q9 x3 ]' Y' g如果你没有用ATL,那么事情就要麻烦一点。你需要实现IDocHostUIHandler接口(关于该接口的前因后果,参考msdn),注意其中的GetHostInfo方法,它要求返回一个DOCHOSTUIINFO。该结构体中的成员dwFlags,就是ATL中IAxWinAmbientDispatch接口中的DocHostFlags属性。7 r6 o6 |9 y/ w6 A# C* A# G
- b* ]: G% j1 A6 B+ ~: B另外有个需要一提的细节是,如果你使用VC6,并且没有更新过Platform SDK,那么你很可能没有DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE、DOCHOSTUIFLAG_THEME常量。解决方案有二:
% `# X6 N! t) G$ Z' R $ q. J- a) D+ I. i) Q% {/ s' k# l
1)安装一个新的Platform SDK,替换掉VC6默认的。' Q- _ J+ z, ?9 L R W, c5 k
2)简单一点,你自己定义一下这两个常量:
! ^4 j3 k! ] [! l1 D. ~ B! R #define DOCHOSTUIFLAG_ENABLE_FORMS_AUTOCOMPLETE 0x4000
% O: L, ]5 h D- P' G: v #define DOCHOSTUIFLAG_THEME 0x40000 |
|