﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-我的玻璃盒子-文章分类-ATL/COM</title><link>http://www.cppblog.com/epubcn/category/6014.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 18 Mar 2013 11:29:25 GMT</lastBuildDate><pubDate>Mon, 18 Mar 2013 11:29:25 GMT</pubDate><ttl>60</ttl><item><title>ATL与网页进行事件交互（连载中……）</title><link>http://www.cppblog.com/epubcn/articles/41367.html</link><dc:creator>深蓝色系统</dc:creator><author>深蓝色系统</author><pubDate>Thu, 17 Jan 2008 13:56:00 GMT</pubDate><guid>http://www.cppblog.com/epubcn/articles/41367.html</guid><wfw:comment>http://www.cppblog.com/epubcn/comments/41367.html</wfw:comment><comments>http://www.cppblog.com/epubcn/articles/41367.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/epubcn/comments/commentRss/41367.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/epubcn/services/trackbacks/41367.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">以前我们为了编写一个漂亮的程序，需要用VC进行客户区非客户区重绘，需要维护图片载入、GDI绘制、消息处理、重载各种控件&#8230;&#8230;，虽然很多人都是这么做的，包括我最近做的项目中，仍然使用GDI在做很多界面上的事情。但是，目前似乎程序结合Web页面，共同去做些事情仿佛越来越流行。当然，界面编程还是离不开GDI或GDI+，我这里只是记录一些我认为未来在写软件、做项目中可能会使用的一些技术——当然，这种技术已经很多人都在用了，而且肯定用的比我好，希望玩儿的比较溜的多包涵文中的错误和不足。</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">从今天开始，我计划用1、2个月的时间陆续写一些关于使用ATL/WTL和网页交互的文字，包括使用COM来操作网页元素，以及对网页元素事件的响应。&nbsp;</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">无论是用MFC/ATL/WTL，无论是Insert一个Microsoft Web Browser的ActiveX控件，还是动态创建了一个Browser实例，甚至是你要直接操作Windows系统的IE，我们首先要做的事情就是获得IE Browser的接口。</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">我们首先来编写一个WTL的示例程序开始说明。</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">（未完待续）</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">2008年1月16日<br>最近一段时间实在是太忙了，刚刚把新产品的需求分析弄完。下一个产品的需求分析马上又要来了。郁闷。<br>现在编码的工作基本都交代出去了，自己已经没有多少时间编码了，很多新的技术和细节我已经不擅长了，不知道这是好是坏。不过最近项目管理的事情倒是学到了不少。<br><br>废话少说，我还是尽量抽空把这个文章写完。</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">使用WTL向导做一个标准的对话框程序出来，记得要把Enable ActiveX Control Hosting的选项勾上。然后丢一个Microsoft Web Browser的ActiveX控件上去，ID比方说是IDC_EXPLORER。</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">想让对话框能够接收WebBrowser控件的事件，需要为对话框增加一些继承类。首先我们定义这样一个东东：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;WebBrowser&nbsp;IDispEventImpl&lt;IDC_EXPLORER,&nbsp;CMainDlg,&nbsp;&amp;DIID_DWebBrowserEvents2,&nbsp;&amp;LIBID_SHDocVw,&nbsp;1,&nbsp;0&gt;</span></div>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">然后添加到对话框的继承列表中，如下：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CMainDlg&nbsp;:&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CAxDialogImpl</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">CMainDlg</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CUpdateUI</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">CMainDlg</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CMessageFilter,&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CIdleHandler,&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;WebBrowser</span></div>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">到stdafx.h中添加这几个必要的头文件：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">exdisp.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">exdispid.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">mshtml.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">mshtmdid.h</span><span style="COLOR: #000000">&gt;</span></div>
<span style="FONT-SIZE: 10pt">OK，我们希望处理的是对话框上那个WebBrowser控件的事件，因此，需要维护一个该控件的成员变量：</span><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">CComPtr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">IWebBrowser2</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;m_pWeb2;</span></div>
<span style="FONT-SIZE: 10pt">接下来，选择我们希望处理的网页事件。首先添加消息响应宏，然后添加两个事件，如下：<br></span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">BEGIN_SINK_MAP(CMainDlg)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SINK_ENTRY_EX(IDC_EXPLORER,&nbsp;DIID_DWebBrowserEvents2,&nbsp;DISPID_DOCUMENTCOMPLETE,&nbsp;OnDocumentComplete)&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SINK_ENTRY_EX(IDC_EXPLORER,&nbsp;DIID_DWebBrowserEvents2,&nbsp;DISPID_BEFORENAVIGATE2,&nbsp;OnBeforeNavigate2)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;END_SINK_MAP()</span></div>
<span style="FONT-SIZE: 10pt">我们上面希望处理两个事件：OnBeforeNavigate2和OnDocumentComplete。下面是这两个事件的实现体：<br></span><span style="FONT-SIZE: 10pt">
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;__stdcall&nbsp;OnDocumentComplete(IDispatch&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">,&nbsp;VARIANT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;)<br><img id=Codehighlighter1_58_146_Open_Image onclick="this.style.display='none'; Codehighlighter1_58_146_Open_Text.style.display='none'; Codehighlighter1_58_146_Closed_Image.style.display='inline'; Codehighlighter1_58_146_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_58_146_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_58_146_Closed_Text.style.display='none'; Codehighlighter1_58_146_Open_Image.style.display='inline'; Codehighlighter1_58_146_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_58_146_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_58_146_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Current&nbsp;document&nbsp;complete!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),MB_OK</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">MB_ICONEXCLAMATION);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;__stdcall&nbsp;CMainDlg::OnBeforeNavigate2&nbsp;(<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;IDispatch</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pDisp,&nbsp;VARIANT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;URL,&nbsp;VARIANT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Flags,&nbsp;VARIANT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;TargetFrameName,<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;VARIANT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;PostData,&nbsp;VARIANT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Headers,&nbsp;VARIANT_BOOL</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;Cancel&nbsp;)<br><img id=Codehighlighter1_336_414_Open_Image onclick="this.style.display='none'; Codehighlighter1_336_414_Open_Text.style.display='none'; Codehighlighter1_336_414_Closed_Image.style.display='inline'; Codehighlighter1_336_414_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_336_414_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_336_414_Closed_Text.style.display='none'; Codehighlighter1_336_414_Open_Image.style.display='inline'; Codehighlighter1_336_414_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_336_414_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_336_414_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Before&nbsp;navigate!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),_T(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Info</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),MB_OK</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">MB_ICONEXCLAMATION);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;</span></div>
<br>下面我们让对话框启动时，让嵌入的Web Browser ActiveX控件直接打开一个网页，在OnInitDialog中添加下面的代码：</span><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">CAxWindow&nbsp;AxWin&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetDlgItem(IDC_EXPLORER);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>AxWin.QueryControl(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">m_pWeb2);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(m_pWeb2)<br><img id=Codehighlighter1_88_217_Open_Image onclick="this.style.display='none'; Codehighlighter1_88_217_Open_Text.style.display='none'; Codehighlighter1_88_217_Closed_Image.style.display='inline'; Codehighlighter1_88_217_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_88_217_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_88_217_Closed_Text.style.display='none'; Codehighlighter1_88_217_Open_Image.style.display='inline'; Codehighlighter1_88_217_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_88_217_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_88_217_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;WebBrowser::DispEventAdvise(m_pWeb2);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_pWeb2</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Navigate(CComBSTR(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://blog.csdn.net/epubcn/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),NULL,NULL,NULL,NULL);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<span style="FONT-SIZE: 10pt">记得在OnDestroy中释放网页事件监控：</span><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(m_pWeb2)<br><img id=Codehighlighter1_13_82_Open_Image onclick="this.style.display='none'; Codehighlighter1_13_82_Open_Text.style.display='none'; Codehighlighter1_13_82_Closed_Image.style.display='inline'; Codehighlighter1_13_82_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_13_82_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_13_82_Closed_Text.style.display='none'; Codehighlighter1_13_82_Open_Image.style.display='inline'; Codehighlighter1_13_82_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_13_82_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_13_82_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;WebBrowser::DispEventUnadvise(m_pWeb2);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;m_pWeb2.Release();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">OK，现在编译运行一下是否会弹出预期的消息对话框。</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">注：如果运行时发生ATLASSERT(!InlineIsEqualGUID(*m_plibid,GUID_NULL) &amp;&amp; "Did you forget to pass the LIBID to CComModule::Init?");错误，请将工程设置中的&#8220;ATL使用&#8221;改为&#8220;动态链接到ATL&#8221;即可。</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">上面是对网页事件的响应。接下来让我们来处理网页上某个元素的事件。比如一个BUTTON的单击、超级链接的点击、一个复选框按钮是否被选中、文本输入框内容的改变和获取等。</p>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: courier new">（未完待续）</p>
<img src ="http://www.cppblog.com/epubcn/aggbug/41367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/epubcn/" target="_blank">深蓝色系统</a> 2008-01-17 21:56 <a href="http://www.cppblog.com/epubcn/articles/41367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>