|
|
利用IE的命令直接操作WebBrowser控件" i \4 W! B) b
G* s1 ]- P/ ?" @5 ~; b通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了# |9 X4 j( z# r M
详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
) C" R0 \ W* T# Q
# ]3 F: J' Z* a/ \其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:
3 ]% Q% r& ~) z详见http://www.csdn.net/Expert/TopicView1.asp?id=620932; B t) b7 Z5 l/ v+ K9 N0 j& `4 X- H
6 Q" a2 c5 G" H
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)% ^4 v2 S( E" N; e
/ I$ x) T. O& U: u
3 j" Y/ ?6 q: |8 i7 ?2 b6 v' T首先,在你的工程里填加对MsHtmcid.h的支持:- u7 y& G9 t: ^. [) \
$ D9 [ a+ U; K7 T6 _
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
4 e& b3 S- ]) E4 _9 L0 w, x V, ] //推荐你到MS网站下载最新文件以获得对IE6命令的支持。
( t: u3 J+ ^; F; u7 b) u6 G
) a8 X$ h1 x2 j1 C' j' t! U- H1 C) D
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。* o" Z; g' D8 M0 t/ a9 ^
下面给出部分演示,看了演示你就知道该怎么做了。$ N) U' X S* r4 z% G, |# o
# v8 W# u, @# N- y将WebBrowser切换至编辑状态:
+ O t+ x M2 u4 E+ i) H
* |1 r) P" J ]7 m5 l {) H: avoid CWebBrowser2::OnGotoEditMode()
0 m" f( d) C( Y2 ^& p" [$ d{5 G$ Z& v4 I8 {1 J5 M% z* Z2 w
CWnd* pwndIEShell = NULL;$ ~! q* z, F; Y j1 S
CWnd* pwndIEHTML = NULL;, Y) _$ S2 @7 W. l' ^8 Y Y
2 b# o. i6 g. d# [1 L
pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针1 b$ q, a7 f# u5 Q) g; v: u) W/ o
if (pwndIEShell)) w3 J( G+ A3 D' J+ h+ v
{; A$ f% E9 F' e) ?
pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘
" q7 `+ \$ x+ V9 X: _4 S$ \4 I }
3 v6 A! P8 h! z" [3 O& q6 [. M% z 7 m: q9 i8 `! l: V$ ?/ U+ ?
if(pwndIEHTML != NULL)
% H' A' N, U% Q: a {3 o! `9 d* |5 _ v6 f3 ]
WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式, K+ z! b! k* P& o( ]8 j- {
pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);4 a5 [8 E% f L* K+ S# ^1 {# b
}
# {, ~ s$ o7 ~( H; d& @# q}
5 Z: i# j/ X1 a3 T S! ^( S/ P( H6 i9 S" J2 z& e) w" ]7 I$ ]
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈)
- s! T3 U7 x! X2 ?, H# e* y
& Y, ]3 X% h5 r, a3 L/ BCHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:
' `$ U; t4 A4 K3 C
7 a2 R; a* f) m- y4 m# q6 yvoid CYourhtmlView::OnAddtoFavorites() ( A9 i9 i, l. d P1 Z
{
& W. U4 ^! K7 g5 ` CWnd* pwndWebControl = NULL;$ A* U2 }: ?- y6 Y! U0 Z* ]
CWnd* pwndIEShell = NULL;
9 G( a: T; [+ g* ^: X+ P) } CWnd* pwndIEHTML = NULL;
! G* X( P5 d( L
+ Q8 J, L3 q+ j' }6 w pwndWebControl = GetWindow(GW_CHILD);
& u" s% O. W7 ]8 T b4 z if(pwndWebControl == NULL)3 ~3 B8 v3 R. D( @; a/ N
return;
! u8 O2 v" N5 D. f% N, a pwndIEShell = pwndWebControl->GetWindow(GW_CHILD); . R4 a A5 u7 P& p! R; N6 j
if (pwndIEShell)
6 G$ `0 f9 s$ x$ k/ }# U; k1 D {
3 u* y- I; f$ s) e. S pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);. y" `5 q5 _. |8 k8 Y. B. D
} R$ [( N- y' ~
; S; _, y$ Y; R+ N$ p. Z) V if(pwndIEHTML != NULL)1 ?# J6 M8 t8 e% ~2 x
{" I( }/ Q/ a3 D7 I0 U
WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。
6 b6 R/ C' x- Q5 g pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);$ n$ L" @: C9 i+ d/ O% e
} * v/ P3 y) n9 a" p) f( g! a
}
7 {7 ~! Y; B/ ]9 m. z9 ]! m; w/ m' v7 H
通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
: Q0 I1 J0 p6 a: f( h# Q1 |
" S' u/ P2 q& G- b好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。; `7 ^: `# k/ c$ S& J/ n1 q
最后,希望通过直接发送命令消息的方法能使你的工作事半功倍! |
|