CALCDRIV 示例:演示自动化客户端应用程序
更新:2007 年 11 月
CALCDRIV 示例是简单的自动化(原来为 OLE 自动化)客户端应用程序。CALCDRIV 驱动 MFCCALC 示例应用程序,这是一个提供基本计算器功能的自动化服务器。MFCCALC 具有简单的计算器界面,就像 Microsoft Windows 所附带的“计算器”应用程序一样。
安全说明: |
---|
提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。 |
获取示例和安装示例的说明:
在 Visual Studio 的“帮助”菜单上,单击“示例”。
有关更多信息,请参见定位示例文件。
示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。
还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 \Program Files\Visual Studio 9.0\Samples\ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。
生成并运行示例
生成并运行 CALCDRIV 示例
遵照 MFCCALC 中的说明来生成并运行该项目。
打开解决方案 calcdriv.sln。
在“生成”菜单中单击“生成”。
说明: 如果在生成 CALCDRIV 之前未生成并注册 MFCCALC,将出现消息“无法创建‘MFCCALC.Application’对象”。
在运行 CALCDRIV 时,显示 Microsoft 基础类库 (MFC)“Calc Driver”对话框并且启动 MFCCALC 应用程序。可以在此时直接使用 MFCCALC 的计算器用户界面,或者可以按如下所示从 CALCDRIV 驱动 MFCCALC:
在 MFC Calc 驱动程序的“Expression”框中,提供由运算符 +、-、* 或 / 分隔的两个或两个以上的数字。
说明: MFCCALC 不解释括号也不实现运算符优先级。
单击“Go”使 MFCCALC 一步计算完该表达式。
单击“Single Step”一次一个数字或一个运算符地逐字通过该表达式。
单击“Refresh”以请求 MFCCALC 的状态信息(“Last Accum”和“Last Operand”)。
使用调度类
CALCDRIV 按如下所示使用 CRemoteCalcDlg 类:
CALCDRIV 的 CRemoteCalcDlg 类表示 MFCCALC 的调度接口。CRemoteCalcDlg 类是从 CCmdTarget 派生的,它具有一些自动化专有的成员函数,例如 CreateDispatch。
CDriverDlg 嵌入 CRemoteCalcDlg 对象 m_calc。CRemoteCalcDlg 对象与它嵌入在其中的 CDriverDlg 对象一样,在 CALCDRIV 的大部分持续时间内是活动的。当构造对话框对象时构造 CRemoteCalcDlg。
CDriverDlg::OnInitDialog 为 CRemoteCalcDlg 对象调用 CCmdTarget::CreateDispatch。CreateDispatch 要求调度名称作为第一个参数。通常,自动化服务器应用程序的开发人员提供描述调度接口的名称以及这些接口的属性和方法的文档。查找自动化服务器应用程序的调度接口的名称的另一个方式是使用 REGEDIT /v(详细选项)查看服务器的 Windows 注册。
CDriverDlg 通过调用 MFCCALC 的 Button 方法来实现 CALCDRIV 的表达式计算器,它是计算器的对话框中各种按钮的仿真器。
CDriverDlg 通过调用 MFCCALC 的 GetOpnd 和 GetAccum 方法来实现 CALCDRIV 的 Refresh 函数。
CDriverDlg 析构函数调用由 MFCCALC 公开的 Quit 方法,以便在 CALCDRIV 关闭时关闭 MFCCALC。
关键字
此示例说明以下关键字:
AfxMessageBox;AfxOleInit;CDialog::DoModal;CDialog::EndDialog;CDialog::OnInitDialog;CEdit::GetSel;CEdit::SetSel;COleDispatchDriver::AttachDispatch;COleDispatchDriver::CreateDispatch;COleDispatchDriver::GetProperty;COleDispatchDriver::InvokeHelper;COleDispatchDriver::SetProperty;CString::GetLength;CWinApp::InitInstance;CWnd::DoDataExchange;CWnd::GetWindowText;CWnd::SetWindowText;GetWindowText;afxMemDF;min;wsprintf
说明: |
---|
某些示例(如此示例)尚未经过修改以反映 Visual C++ 向导、库和编译器中所做的更改,但仍演示了如何完成所需的任务。 |