原文地址:ms-help://MS.MSDNQTR.v90.en/dv_vswalk/html/ff258cfd-ccf1-4986-815e-e586809b9f51.htm (MSDN Help 2008)
下面的演练描述创建基于MFC的富客户应用的过程以及各种Visual Studio .NET的其他特性。
在这个演练课程期间,你将完成下列行为:
- 设计一个基于MFC项目方案用于显示现有数据库中的数据,以及使用几个对话框显示下列特性:
- 托管一个无窗体的ActiveX控件
- 使用动态的HTML(DHTML)对话框
- 验证应用程序的用户使用现有的XML Web服务
为了完成这个演练,你必须提供现有的数据库并且至少有一个可查找的表。(这个演练使用pubs数据库和authors表)
说明:我使用英文版的Visual Studio 2008开发
创建MFC富客户端应用程序
创建MFC应用程序:(我这里创建MFC单视图应用程序)
- 在文件(File)菜单上,单击New并且选择工程(Project)。显示新工程对话框
- 在工程类型(Project types)面板上单击Visual C++并选择MFC,在Templates面板上单击MFC Application
- 在名称(Name)框,输入MyProject
- 单击确定(OK)按钮关闭对话框后,打开MFC应用程序向导
注意:在MyProject属性页的General内的Common Language Runtime support项设为Common Language Runtime Support(/clr)
说明:此演练使用SQL 服务器上的pubs数据库。
实现数据库支持:
- 在MFC应用程序向导,选择数据库支持
- 选择带文件支持的数据库视图(Database View with File Support)
- 单击数据源按钮(Data Source)
- 从OLE DB Provider(s)列表框,单击Microsoft OLE DB Provider for SQL Server项并单击下一步(Next)
- 输入或选择一个现有的服务器名
- 选择使用Windows NT集成安全设置(Use Windows NT Integrated Security)
- 在服务器上选择pubs数据库
- 单击确定按钮以创建连接
- 在选择数据库对象(Select Database Object)对话框内,展开Tables及其dbo用户并选择authors表
- 单击确定关闭对话框
- 单击完成以创建此框架应用程序(有一个安全提示框,直接单击确定即可)
- 在你创建工程后,你需要从MyProjectSet.h删除#error行
从现有的数据库中存取并且显示数据
在这节里,你将使用简单的窗体(form)和控件演示从authors数据表中存取和显示数据。因为这仅是一个示范程序,所以查询和显示数据是较简单的。查询表中所有作者的结果显示在列表框(list box)中。
MyProject应用程序已经包含一个form对象(称为IDD_MYPROJECT_FORM),其位于资源视图(Resource View)的对话框(Dialog)节点下。你可以修改这个窗体以显示authors表中的作者简单列表。
修改此窗体
- 在资源视图中,展开你的工程,展开Dialog节点,并双击默认窗体对象(IDD_MYPROJECT_FORM)
- 从工具栏(Toolbox)中拖拽List Box控件到默认窗体上
- 右击List Box控件弹出快捷菜单,单击Add Variable(出现添加成员变量向导)
- 在Variable name框内输入m_DataList并单击完成Finish按钮
- 拖一个Button控件到默认窗体上,在属性窗体(Properties Window)上,修改Caption box的值为Control Host.
- 拖一个Button控件到默认窗体上,在属性窗体(Properties Window)上,修改Caption box的值为DHTML Dialog.
注意:在稍后的演练过程中,这两个控件用来存取应用程序的其他特性。
显示查询结果
- 在类视图中,展开项目节点,并接双击CMyProjectView类的OnInitialUpdate方法
- 在函数现有代码后面添加代码。这段代码使用db_command属性以使用数据表中所有当前作者的last names初始化document对象(m_MyProjectSet)数据集。提示:如果直接拷贝MSDN上的代码,编译错误。
- 在Build菜单上,单击创建方案(Build Solution)
- 在Debug菜单上,单击不调试开始(Start Without Debugging)
查询的结果将显示在子视图窗体的列表框内
创建、托管一个无窗体的ActiveX控件
接下来对胖客户端应用程序修改是托管一个无窗体自定义控件的对话框。第一步创建一个带有简单事件的自定义ActiveX控件。任何创建一个包含控件及其处理事件的对话框对象。
创建自定义控件
- 在方案浏览器里,右击MyProject方案
- 在快捷菜单,单击Add并且单击New Project,出现新工程对话框
- 在工程类型面板,选择Viual C++ Projects,并且在模版面板,单击ATL 工程图标
- 新工程命名为CustomCtl并点击OK
- 单击完成(Finish)并接收默认设置且创建项目
- 右击CustomCtl工程
- 在快捷菜单上单击Add,然后单击Add Class就出现Add Class对话框
- 双击ATL Control项,出现ATL Control向导
- 在ATL Control向导里的Short name框里输入MyCtl
- 在Option页,选择Connection points
- 单击完成(Finish)创建自定义控件对象
一旦创建了控件,你将添加一个Click简单事件。当鼠标在控件区域被单击时,由控件触发这个事件。
创建Click事件
- 在类视图上,展开CustomCtl节点
- 右击自定义控件接口事件(_IMyCtlEvents)
- 在快捷单,单击Add,并且单击Add Method
- 使用添加方法向导输入下列值 Return type: void;Method name:Click
- 单击完成创建Click事件
- 在类视图上,选择控件类(CMyCtl),右键快捷菜单,选择Add,然后选择Add Connection Point...,以添加_IMyCtlEvents的连接点,自动产生代码,其头文件为:_IMyCtlEvents_CP.h
- 在属性窗口,单击Message按钮并且对WM_LBUTTONDOWN消息添加OnLButtonDown处理事件
- 在处理代码体内添加下列代码:Fire_Click(); return 0;
- 在Build菜单,单击Build Solution
成功创建此项目,简单对话框可以托管此控件
托管控件
- 在资源视图上,右击MyProject方案
- 在快捷菜单,单击Add,并单击Add Resource
- 单击Dialog项并选择New
- 右击IDD_DIALOG1对话框并在快捷菜单单击Add Class(出现MFC类向导)
- 在MFC类向导里,输入下列值:Class name: CMyCtlDlg;Base class: CDialog
- 单击完成(Finish)
- 右击IDD_DIALOG1对话框并且在快捷菜单上选择插入ActiveX控件(Insert ActiveX Control)
- 在Insert ActiveX Control对话框模版上选择CMyCtl对象并单击OK以添加控件
- 在对话框模版上选择ActiveX 控件
- 在属性窗体里单击控件事件(Control Events)按钮并为ClickMyctl1句柄添加Click事件
- 在事件处理体中添加:AfxMessageBox("Click event fired");
最后一步涉及注入胖客户端程序对话框。这就完成了早先你在存取和显示现有数据库的数据主题中创建Control Host按钮的处理代码。
显示控件托管对话框
- 在资源视图中,双击IDD_MYPROJECT_FROM显示主窗体(IDD_MYPROJECT_FORM位于MyProject方案中资源文件的Dialog节点)
- 双击早先添加的Control Host按钮
- 添加下列代码到处理函数代码:CMyCtlDlg dlg; dlg.DoModal();
- 在当前源文件内最后#include语句后面添加下列代码:#include "MyCtlDlg.h"
- 在Build菜单上,单击Build Solution
- 在Debug菜单上,单击Start Without Debugging
通过按Control Host按钮,你能够调用控件托管对话框。通过在控件里单击左鼠标按钮触发自定义Click事件。
实现DHTML 对话框
胖客户端应用程序的另一个性能是为用户接口而不是传统对话框资源使用的HTML对话框。对于这个演练的目的,将实现一个包含显示简单位图的图片控件的简单DHTML对话框。
实现DHTML对话框
- 在资源视图上,右击MyProject工程
- 在快捷菜单上,单击Add,接着单击Add Resource
- 单击Dialog项并单击New添加一个新的对话框
- 从对话框模版上移除OK和Cancel按钮;在随后的步骤中在HTML中实现这些
- 右击IDD_DIALOG2对话框并选择Add Class
- 输入下列值:Class name:CMyDhtmlDlg; Base Class:CDHtmlDialog
- 单击Finish
- 在资源视图上的HTML节点下,双击IDR_HTML_MYDHTMLDLG项并且在设计面板上单击HTML页签以编辑相关的HTML文件
- 使用This is the text content of my DHTML dialog box文字 替换现有的文字(可能像TODO: Place controls here的文字)
正像早先实现托管对话框控件一样,在用户按下应用程序主窗体上按钮(DHTML Dialog)时显示这个对话框。
显示DHTML对话框
- 在资源视图上,双击IDD_MYPROJECT_FORM以显示主窗体
- 双击早先添加的DHTML Dialog按钮
- 在处理函数中,添加下列代码:CMyDhtmlDlg dlg; dlg.DoModal();
- 在当前源文件里最后#include瑜伽后面添加下列代码:#include "MyDhtmlDlg.h" 这包含实现DHTML对话框类的.h文件
- 在Build菜单上,单击Build Solution
- 在Debug菜单上,单击Start Without Debugging
当对话框出现时,通过按DHTML Dialog按钮打开DHTML对话框
有关DHTML对话框信息及更多完整例子,参看CDHtmlDialog类和DHtmlExplore范例。
创建和使用现有的XML Web服务
偶尔,胖客户端应用程序与外部XML Web服务,通过现有的数据库或数据库提供的丰富的前端交互。用户能够在熟悉或图形方式的数据交互。
在这步,你将创建一个设计运行在使用微软互联网信息服务(IIS)的Web服务器上的简单的XML Web服务。
创建XML Web服务
- 在File菜单上,单击New,然后单击Project. 出现New Project对话框
- 在工程类型面板,单击Visual Basic Projects 或者 Visual C# Projects,在模版的面板上单击ASP.NET Web Service图标
- 在Solution的位置选择Add to Solution
- 单击OK关闭对话框并创建了此解决方案
XML Web服务的公共部分是验证应用程序的每个用户。这次你创建解决方案,你能够实现简单效验方法。此验证程序是故意简单以清楚地说明这一概念。
创建完此方案,并添加一个验证方法到Service1.asmx源文件中。要到这点,右击Service1.asmx.cs设计界面并选择View Code。用下面代码代替文件末尾的HelloWorld web方法。(具体代码请参看源代码)
在你修改源文件后,创建此解决方案。
一旦XML Web服务存在,你可以使用Add Web Reference对话框添加和配置Web引用。(必须启动XML Web服务才能引用)
添加Web引用到客户端应用程序
- 打开MyProject解决方案
- 在解决方案资源管理器里,右击MyProject工程并选择Add Web Reference
- 在Browse to中,如果XML Web服务与MyProject工程在同一个解决方案里,那么选择Web services in this solution;否则选择Web services on the local machine。将列出在本机或本解决方案里的现有XML Web服务;选择你创建的服务(Serverce1)。如果发现Web服务,在左边面板里将出现服务的描述并且Add Reference按钮被激活。Web服务的.asmx文件的URL也应该出现在URL框里;它看起来像这个:http://localhost/MyService/Service1.asmx
- 单击Add Reference按钮
一旦Web引用被添加,你将添加一个验证对话框来演示应用程序与XML Web服务间的交互。
添加验证对话框
- 在资源视图(Resource View),右击MyProject工程
- 在快捷菜单,单击Add,并且单击Add Resource
- 双击Dialog项
- 双击IDD_DIALOG3对话框窗体(MFC类向导出现)
- 输入下列值:Class name:CMyValidateDlg;Base Class:CDialog
- 单击Finish
现在创建了对话框,添加控件为用户提供验证服务。
验证服务
- 拖两个Edit控件到IDD_DIALOG3对话框窗体上
- 右击第一个Edit 控件
- 在快捷菜单,选择Add Variable
- 在变量名框(Variable Name)里输入m_Name
- 在分类(Category)下拉菜单,选择Value
- 单击Finish
- 右击第二个Edit控件
- 添加另一个变量(称为m_Password值分类)
- 在对话框窗体上双击OK按钮
- 在当前源文件的最后#include语句后面添加#include "WebService.h" 这里包含被验证对话框使用的Web服务的.h文件
- 添加下列代码到处理函数(代码请参看源代码)
为了验证程序是有效的,此验证对话框必须是第一个用户界面对象出现。如果用户输入正确的姓名和密码,那将显示胖客户端应用程序。如果输入一个错误的姓名和密码,则当前用户将禁止存取胖客户端。
若要实现此行为,修改主应用程序类的InitInstance函数首先调用此对话框。仅当对话框正确退出,应用程序才继续执行。
初步显示验证对话框
- 在类视图上,展开CMyProjectApp节点
- 双击InitInstance函数并编辑函数体
- 在调用m_pMainWnd对象的ShowWindow函数之前添加下列代码
- 在当前源文件里的最后#include语句后面添加下列代码:#include "MyValidateDlg.h"
- 创建解决方案。在Build菜单上,单击Build Solution
- 在Debug菜单,单击Start Without Debugging. 在验证对话框上,在Name和Password编辑框输入同样文字,然后单击OK。胖客户端程序将运行,显示主对话框。
创建安装工程
最后步骤开发你的Visual C++应用程序是创建一个安装工程
创建安装工程
- 在解决方案资源管理器,右击MyProject解决方案
- 在快捷菜单,单击Add,并单击New Project
- 在工程类型面板,选择Setup and Deployment Projects,并且在模版的面板里,单击Setup Wizard图标
- 安装项目名称输入MySetup然后单击OK;出现安装向导
- 右击MySetup,在快捷菜单单击Add,选择Project Output...
- 选择Primary Output from MyProject 和 Primary Output from CustomCtl
- 单击OK
- 在Build菜单,单击Build MySetup
这个结果文件(MySetup)能被拷贝到目标机器上进行安装盘客户端应用程序。关于发布和安装向导更多信息,参看发布应用程序,发布工程,和发布演练。