|
|
利用IE的命令直接操作WebBrowser控件
: C2 C: d8 Z9 x
6 n$ V& L0 ^) b& B: U3 R通常,我们对CHtmlView/WebBrowser控件进行打印、查看源文件、查找等操作麻烦的不得了
w& T2 l& M; I详见http://support.microsoft.com/support/kb/articles/Q156/7/32.ASP
! r# ~* x# P. P6 \, X6 ~0 Q. S e; V$ o/ {" i- m: S( y
其次就是打开“Internet选项”、“添加到收藏夹”等方面的麻烦:$ `' W; L% N8 a
详见http://www.csdn.net/Expert/TopicView1.asp?id=620932+ N3 E2 t9 g. ^, p* ?' t1 V$ D
/ n6 X& [! D5 } d, I& r2 u) d8 r* E
下面介绍的方法能够迅捷的通过短短几行代码完成上述操作,并且你还能完成一些特殊的操作(比如让IE控件进入像frontpage那样的编辑状态等等)
" R, o' W% b2 x9 y. [3 @$ d
" r7 t4 e+ _# x4 v5 [
# r) z; p1 m! @3 H, v# W, [* k首先,在你的工程里填加对MsHtmcid.h的支持:
5 b% H$ W0 O6 p$ J# i- T8 i8 O* G7 ^% I. M, j0 l5 C
#include <MsHtmcid.h> //你可以在VC的头文件的目录中找到它,
" ?' L1 Z9 L! F) T //推荐你到MS网站下载最新文件以获得对IE6命令的支持。' f2 M8 H4 k% U, z. K2 A
3 G, W5 c5 B* S2 `, {8 S
$ H5 k/ |4 Y- ~/ h
然后你所要做的仅仅是找到IE控件的Internet Explorer_server窗口句柄发送命令给它。
`( c; @# `* G6 [下面给出部分演示,看了演示你就知道该怎么做了。
/ X( ]6 P4 O& l4 H/ w4 D* W, y# c' i! d: V4 q7 n. z9 e
将WebBrowser切换至编辑状态:
5 |2 ^+ {( e8 K0 j8 e1 p& S4 O5 Y) T/ C, Y- @- G
void CWebBrowser2::OnGotoEditMode()
- X( [# V& J8 S* Y{) t: \ y+ H/ ^3 S+ w0 r' B9 B( Z
CWnd* pwndIEShell = NULL;1 k1 w. G0 t* G; {
CWnd* pwndIEHTML = NULL;
; e9 u4 m: X% M6 J ( Y$ E, v8 Y6 V5 J. y" C
pwndIEShell = this->GetWindow(GW_CHILD); //this是CWebBrowser2指针
1 L) ?8 F/ R7 ^% j- d: T# Z$ ] if (pwndIEShell)+ f2 [/ ~: z+ ?( p: j
{
) [0 d O* C- [6 _1 m5 L7 b& D pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD); //WebBrowser控件的窗口关系你可以通过spy++来观察,这里不累赘3 v: ^5 K4 n# t9 {% [
}. P0 |" \ H$ O0 L
" I5 K3 z/ S* J* O if(pwndIEHTML != NULL)+ x5 D3 V; c% I% Y* Z* {
{" R }' l* B5 w* i; c2 f+ _: T* ~
WPARAM wParam = MAKELONG(IDM_EDITMODE, 1);//IDM_EDITMODE换为IDM_BROWSEMODE就返回浏览模式' l& e6 y3 |8 C. ?
pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);# s- R. w) p! }# s7 `4 P
}
! H4 _/ `5 V/ s3 }5 C' k# ^) `6 e}, A% N5 K0 ~' D
6 O; P' v, q$ V5 v
之后你会发现WebBrowser控件变的跟frontpage一样(早知道这样不用DHtmlEdit控件了,哈) U" S* Q1 i U
6 g+ e. m' C3 ~- f, |6 GCHtmlView的实现跟上面稍有不同,因为多了个CFormView的缘故,具体代码如下:7 R B: w( k$ {* w, |
& L7 S* B4 o# K% Y! S* U2 V- `' N
void CYourhtmlView::OnAddtoFavorites() ! _7 b3 h4 e6 K: I6 K
{
8 ?# @+ z G0 n CWnd* pwndWebControl = NULL;5 g. I# W+ I6 X% {* V
CWnd* pwndIEShell = NULL;
# a) T' G" Y4 D O; u! @ CWnd* pwndIEHTML = NULL;
! E' W; D, L& E% o
+ Q c+ |: T4 ~& k3 b pwndWebControl = GetWindow(GW_CHILD);) n, ^+ d6 `/ P, s( \4 F/ L
if(pwndWebControl == NULL) p$ U" n' }$ O3 x+ P8 `7 _( \
return;7 X" f e* t* Y& e+ R
pwndIEShell = pwndWebControl->GetWindow(GW_CHILD);
1 m+ H( q, f I" g% {) u* K" b if (pwndIEShell)! ?2 O8 ?% r; j) G' e- o. ?- q3 Z- ?
{
2 C! o0 l* a4 Q9 r5 L1 V6 w0 y pwndIEHTML = pwndIEShell->GetWindow(GW_CHILD);6 R. c- `4 y* h3 E
}
+ ]6 k% _$ x3 ]( t - [- @9 N+ g) d: v/ G3 C" t
if(pwndIEHTML != NULL)
3 {4 u% ^1 v: o. w O7 j- e2 J {+ j/ P! e4 Y5 w6 M \: \
WPARAM wParam = MAKELONG(IDM_ADDFAVORITES, 1);//添加到收藏夹,换成IDM_OPTIONS就是打开internet选项。9 F% l& k: M, ^# _) T: a
pwndIEHTML->SendMessage(WM_COMMAND, wParam, (LPARAM)pwndIEHTML->m_hWnd);, m9 ?; w1 B( E5 v
} 2 Y1 P3 V- F1 G
}6 b, P/ k- N( O5 r \) G
: f4 S3 g! g& J5 X8 q4 ~通过改变wParam ,你可以实现几乎IE所有的已知的命令(另存为...、打印预览、创建桌面快捷方式等等)和一些未知的命令(比如进入编辑模式等等)。
5 r* L$ L* o1 X1 X5 Z# F8 [ B2 M
( u, U9 k* s$ X好了,就介绍到这,具体的你可以通过观察MsHtmcid.h和实践来了解。
% E9 T- Q5 ?* l K最后,希望通过直接发送命令消息的方法能使你的工作事半功倍! |
|