// DlgProxy.cpp : 实现文件 // #include "stdafx.h" #include "tcStatic.h" #include "DlgProxy.h" #include "TcStaticDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // TcStaticDlgAutoProxy IMPLEMENT_DYNCREATE(TcStaticDlgAutoProxy, CCmdTarget) TcStaticDlgAutoProxy::TcStaticDlgAutoProxy() { EnableAutomation(); // 为使应用程序在自动化对象处于活动状态时一直保持 // 运行,构造函数调用 AfxOleLockApp。 AfxOleLockApp(); // 通过应用程序的主窗口指针 // 来访问对话框。设置代理的内部指针 // 指向对话框,并设置对话框的后向指针指向 // 该代理。 ASSERT_VALID(AfxGetApp()->m_pMainWnd); if (AfxGetApp()->m_pMainWnd) { ASSERT_KINDOF(TcStaticDlg, AfxGetApp()->m_pMainWnd); if (AfxGetApp()->m_pMainWnd->IsKindOf(RUNTIME_CLASS(TcStaticDlg))) { m_pDialog = reinterpret_cast(AfxGetApp()->m_pMainWnd); m_pDialog->m_pAutoProxy = this; } } } TcStaticDlgAutoProxy::~TcStaticDlgAutoProxy() { // 为了在用 OLE 自动化创建所有对象后终止应用程序, // 析构函数调用 AfxOleUnlockApp。 // 除了做其他事情外,这还将销毁主对话框 if (m_pDialog != NULL) m_pDialog->m_pAutoProxy = NULL; AfxOleUnlockApp(); } void TcStaticDlgAutoProxy::OnFinalRelease() { // 释放了对自动化对象的最后一个引用后,将调用 // OnFinalRelease。基类将自动 // 删除该对象。在调用该基类之前,请添加您的 // 对象所需的附加清理代码。 CCmdTarget::OnFinalRelease(); } BEGIN_MESSAGE_MAP(TcStaticDlgAutoProxy, CCmdTarget) END_MESSAGE_MAP() BEGIN_DISPATCH_MAP(TcStaticDlgAutoProxy, CCmdTarget) END_DISPATCH_MAP() // 注意: 我们添加了对 IID_ItcStatic 的支持 // 以支持来自 VBA 的类型安全绑定。此 IID 必须同附加到 .IDL 文件中的 // 调度接口的 GUID 匹配。 // {FE5F6896-4A21-46D1-B03C-A4FA6831DE93} static const IID IID_ItcStatic = { 0xFE5F6896, 0x4A21, 0x46D1, { 0xB0, 0x3C, 0xA4, 0xFA, 0x68, 0x31, 0xDE, 0x93 } }; BEGIN_INTERFACE_MAP(TcStaticDlgAutoProxy, CCmdTarget) INTERFACE_PART(TcStaticDlgAutoProxy, IID_ItcStatic, Dispatch) END_INTERFACE_MAP() // IMPLEMENT_OLECREATE2 宏在此项目的 StdAfx.h 中定义 // {CE2EE923-C315-4E41-A1B1-D0BA1E788B5A} IMPLEMENT_OLECREATE2(TcStaticDlgAutoProxy, "tcStatic.Application", 0xce2ee923, 0xc315, 0x4e41, 0xa1, 0xb1, 0xd0, 0xba, 0x1e, 0x78, 0x8b, 0x5a) // TcStaticDlgAutoProxy 消息处理程序