使用URL Monik(转)

使用URL Moniker: 今天,许多公司特别关注Internet。因此,在不久的将来,访问Internet上的信息,一定会像访问本地硬盘数据一样容易。实际上,随着Internet Explorer 4.0中包含了部分Visual C++ 6.0特性,Microsoft已经向上述目标迈进了一步。你将会发现硬盘和Internet上你最喜欢的站点正共享着一个公用的Explorer视图。
WEB链接 获取自己需要的信息经常是指访问自己的本地新闻组,以获得其它的程序员的帮助。不必多说,你会发现有些新闻组比别人花更多的时间在讨论URL moniker ;毕竟它还算是一个神秘的课题。例如,microsoft.public.win32 .programmer.ole 新闻组很长时间以来一直在讨论将Moniker捆绑到专用控件上的话题。甚至还有一个新闻组专门用于URL moniker:microsoft.public.activex.programming.urlmonikers。如果你想从新闻组中的人那里获得Visual C++有关的帮助,可以看一看microsoft.public. vc.mfcole。
当然,数据站点的这种界线模糊倾向(blurring)对用户和程序员都会提供一些新机遇。例如,作为用户你会发现,将你需要的数据放入你需要的应用程序中去进行编辑要省事一点。作为程序员你会发现,现在还有许多别的方法来处理一个程序,并使它产生特殊的效果。
注释 如果你不是使用Visual C++5.0以上版本来创建本节的例子,那么,就必须安装Activex SDK。SDK提供了能使示例代码正常工作所需的URLMON.H MLINK.LIB和URLMON.LIB文件。
使应用程序具有特殊效果的一种最普通方法就是给它添加超链接功能,而最容易的添加方法是,在应用程序的 工具栏上,放置一个可以使用户进入公司内部网的按钮。同样,你可以使用另一按钮,允许用户选择特定站点或在公司授权的Internet站点列表中进行选择。这正是本节要介绍的内容。样本程序将说明如何给某个典型的应用程序加入两个按钮,从而使用户可以快速简单地链接到Internet上。
第一步当然是创建一个新的应用程序。就像第11章中的ActiveDocument例子一样,你也可以使用老版本的Microsoft Visual C++编译器来创建这些代码。本节假定你使用的是5.0 以上版本,尽管用4.2 版本创建它相对容易些。由于第2 章已经介绍了使用MFCApplication Wizard创建应用程序的过程,所以这里只进行简短的描述。在创建过程中,你需要选择一些选项才能使例子正常工作。首先,例子的名称为ViewURL(尽管你可以选择自己喜欢的名字)。其次,在Wizard的第1页应选择Single Document 。第三,在Wizard的第4页上应选择Windows Sockets支持。最后,在MFC AppWizard 的第6 页将Base Class域设置为CEditView,这将允许你在示例应用程序的主窗口中编辑文本。
技巧 还有许多情况像本例一样不需要CRichEditView类的全部功能。与CEditView相比,CRichEditView类不仅相当大,而且使用CRichEditView 类还要求给应用程序添加OLE容器支持功能,这就进一步增大了应用程序的规模。CEditView类既能让你显示无格式文本,又能使应用程序比较小──这正是实用类应用程序一个很重要的考虑因素。
添加库支持
一旦Wizard完成了应用程序创建工作后,你就可以开始做进一步的修改了。首先要完成的工作就是给应用程序加入超链接支持。为此,可在STDAFX.H文件中加入下述的#include。
//Added for URL support.
#include "URLMon.h"
该头文件包含了你在使用各种URL moniker有关命令时所需的所有#define语句。本章前面已经介绍了其中一些命令,这里将介绍它们是如何工作的。
注释 老版本的 Visual C+ + 用户要做的下一件事就是添加一些静态的支持(但是Visual C++ 5.0以上的用户不必做这一步)。HLINK.LIB和 URLMON. LIB 这两个库都在ActiveX SDK的LIB文件夹中。可以利用Visual C+ + 的Insert (插入)| Files Into Project(文件到项目)命令给应用程序添加所需的库支持。通过查看FileView中的包括文件列表,来检查是否真的添加了支持(只需单击显示工作区左边的FileView标志即可)。
技巧 Microsoft打算将来把HLINK.LIB和URLMON.LIB中的静态库支持放入URLMON.DLL中。一定要在编写支持URL moniker的应用程序之前检查该动态库的支持功能。
创建所需资源
现在已经加入了所需的库支持,让我们给 工具栏添加一些按钮。单击ResourceView (资源视图),打开Toolbar文件夹,然后双击IDR_MAINFRAME项,就能看到如图12.1 所示的标准 工具栏。添加新按钮很容易,你只需单击 工具栏末尾的空白按钮,然后开始在绘画区域中显示的空白按钮上绘制。把这个按钮稍微向右移动一点,就能将它与 工具栏上已显示的其它按钮区分开。图12.1显示的是这个例子中添加的两个按钮。
0652312263140881.JPG
注释 增加按钮可以给用户提供一种可视图化的显示,另外,还要给应用程序添加一些按钮标识信息。简单地双击将要设置的按钮的 工具栏(不要单击刚创建的按钮图标),就会看到如下图所示的对话框。对两个按钮使用下表进行的设置。
0652312263939768.JPG
技巧 注意Caption包含了一个较长的描述、一个 以及一个较短的描述。较长的描述将出现在应用程序的状态栏上。较短的描述用于当鼠标停留在该控件时的弹出帮助。一定要用“ ”分隔这两项。在Visual C++应用程序中任何看到弹出式帮助的地方都可以使用这种特殊的输入方法。
0652312264395127.JPG
单击第一个按钮将把用户带入公司的主页。按钮已经起作用,在资源方面不必再做什么了。你需要添加的只是完成实际工作的一点代码。但是,第二个按钮将允许用户输入他们自己的站点,如果愿意的话,还可以输入该站点中的某个位置。该按钮还支持那些使用框架的站点上的框架,这就需要添加一个特殊的对话框。打开 ResourceView 中的Dialog 文件夹,用右键单击Dialog 文件夹,就能看到一个关联菜单。 选择Insert Dialog项,就能看到一个名为IDD_DIALOG1 的新对话框添加到了文件夹的列表中(应用程序当前提供的唯一一个对话框是About Box对话框)。
现在给对话框改名。用右键单击IDD_DIALOG1项,然后从关联菜单中选择Properties。在ID字段中输入IDD_SITE_SELECT,然后单击属性对话框,就能看到新名字出现在Dialog文件夹的对话框中。
给对话框添加所需控件相当容易。首先要做的是将对话框大小改为25×120像素点(即出现在状态栏右边的当前对话框大小)。这可能要占一点空间,因为用户可能想输入很长的URL。改变对话框大小后,可以添加三个标签和三个编辑控件,如图12.2所示。
0652312264735024.JPG
双击每个编辑控件显示它们的属性对话框,设置一个易于记忆的ID。第一个编辑控件的ID 为IDC_URL,第二个编辑控件的ID 为IDC_ANCHOR_NAME,第三个编辑控件的ID 为IDC_FRAME_NAME。稍后将会介绍这些名称的作用。
定义新类并编写代码
现在已经定义了所有所需的资源,应该给添加到 工具栏中的两个按钮增加代码了。确保已经选择了IDD_SITE_SELECT对话框,然后用View|ClassWizard命令显示ClassWizard 对话框。在这种情况下,你将看到如下图所示的对话框,它表明IDD_SITE_SELECT 是一个新对话框,需要为它创建一个类。
0652312265128550.JPG
单击OK,你将看到New Class 对话框。你需要提供的只是类名。示例程序使用的是CSiteSelect,它使得类名及其相关资源很易于识别。本例使用的是缺省的CDialog基类。单击OK完成操作。
选择ClassWizard的Message Map页,然后从Class Name字段中选择CMainFrame类名。滚动下拉对话框左边的Object IDs直至找到ID_GO_HOME。单击该项,然后单击对话框右边的Message字段中的COMMAND项。单击Addfunction给应用程序添加所需函数。此时会看到Add Member Function对话框。单击OK接受缺省函数名。同样处理ID_GO_SITE 对象标识符。完成之后,MFCClassWizard对话框如下图所示。
0652312265539413.JPG
选择OnGoHome项并单击Edit Code。MFC ClassWizard 就会直接进入新函数框架。程序列表12.1显示了该按钮的代码,确保将HlinkSimpleNavigateToString()函数调用的第一个参数与Web服务器的缺省页面地址相匹配。你会看到OnGoSite()函数就在OnGoHome() 函数之后。给它添加程序列表12.2所示的代码。确保在MainFrm.Cpp文件开头包括了SiteSelect.H(如果愿意的话,还可在STDAFX.H文件中包含它)。
0652312265965418.JPG
现在已有足够的代码可以将用户送往主页(程序列表12.1)或显示对话框(程序列表12.2)上了。不过还需要给CSiteSelect对话框增加一些代码。当用户单击OK时,你可能想把他们带到他们选择的其它站点。首先要添加一些内存变量来记录用户的输入。再来看一看IDD_SITE_SELECT对话框。按下CTRL键并双击第一个编辑框,就能看到如下图所示的Add Member Variable对话框。
它允许你给IDC_URL编辑框赋予一个变量。本例中命名为URL(该名字将会在对话框中以m_URL出现)。选择Category域中的Control,把Variable Type域改变成 CEdit ,CEdit就是该例所需的变量类型。单击OK完成操作。同样处理另两个编辑框,并将第二个变量命名为Anchor,第三个命名为Frame。
有了变量,现在还要添加另一个函数,用View|ClassWizard命令打开MFCClassWizard。对话框应该仍然显示 Message Map 页; 否则的话就选中该页。在 Class Name 域中选择CSiteSelect项,就会看到对话框左边的Object IDs列表变为CSiteSelect对话框提供的内容。选中IDOK对象标识符和Message域中的BN_CLICKED项。单击Add Function,然后单击Add Member Function对话框中的OK。这时MFC ClassWizard对话框如下图所示。
现在,单击Edit Code显示函数的框架。该函数接收用户在对话框中的输入信息,然后将它们带到Internet上的特定位置。程序列表12.3显示了完成该任务的代码。
0652312270174996.JPG
0652312270485695.JPG
0652312271331436.JPG
上述代码中有一些小技巧,但大部分C语言程序员使用过这些技巧。首先,要将三个用于保存位置信息的变量置为NULL。这样,即使它们没有什么信息可保存,也能正常运行。这时,代码仍要强制用户提供URL,只有一种情况不必这么做,即,如果你允许用户跳到他们当前所在页的一个锚地,就可以让URL参数仍然是NULL 并简单地让它们指定锚地名称。保存对话框中信息的方法需要使用缓冲变量。但从LPTSTR(指向Windows或Unicode的以NULL结尾的长指针)到LPCWSTR(指向以NULL结尾的Unicode串常量的长指针)的转换很简单。这个特殊例程的核心是调用HLinkSimpleNavigateToString,个函数负责将位置信息转换为真正的URL。
现在,让我们看一下应用程序是什么样子。和通常一样编译并运行应用程序。如果单击Home Web Page按钮,就能看到Internet Explorer(或其它缺省浏览器)启动了,并把你带到设为主页的任何Internet站点。图12.3显示了本例按下该按钮的结果(图中显示的主页是作者的Internet服务器设置,你的屏幕上应该显示自己的设置)。一定要将程序列表12.1中HLinkSimpleNavigateToString()调用的地址设置为自己的主Web站点,否则就会出现意外结果。
0652312271717036.JPG
单击Any Web Page按钮会显示如下图所示的对话框。
0652312272425356.JPG
它允许输入一个URL、可选的锚地名或框架名。目标Web页必须支持所指定的锚地名和框架名,否则函数调用会失败。如果输入本地测试机器支持的地址之外的URL值,那么应用程序还需要一个活动的Internet连接。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-123237/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-123237/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值