// [!output DIALOG_AUTO_PROXY_IMPL] : 實作檔 // #include "stdafx.h" #include "[!output APP_HEADER]" #include "[!output DIALOG_AUTO_PROXY_HEADER]" #include "[!output DIALOG_HEADER]" #ifdef _DEBUG #define new DEBUG_NEW #endif // [!output DIALOG_AUTO_PROXY_CLASS] IMPLEMENT_DYNCREATE([!output DIALOG_AUTO_PROXY_CLASS], [!output DIALOG_AUTO_PROXY_BASE_CLASS]) [!output DIALOG_AUTO_PROXY_CLASS]::[!output DIALOG_AUTO_PROXY_CLASS]() { EnableAutomation(); // 若要保持應用程式執行的時間與 Automation 物件作用的時間一樣長, // 建構函式必須呼叫 AfxOleLockApp。 AfxOleLockApp(); // 經由應用程式主視窗指標,取得對對話方塊的存取。 // 將 Proxy 的內部指標設定為指向對話方塊, // 並設定指向此 Proxy 的 // 對話方塊返回指標。 ASSERT_VALID(AfxGetApp()->m_pMainWnd); if (AfxGetApp()->m_pMainWnd) { ASSERT_KINDOF([!output DIALOG_CLASS], AfxGetApp()->m_pMainWnd); if (AfxGetApp()->m_pMainWnd->IsKindOf(RUNTIME_CLASS([!output DIALOG_CLASS]))) { m_pDialog = reinterpret_cast<[!output DIALOG_CLASS]*>(AfxGetApp()->m_pMainWnd); m_pDialog->m_pAutoProxy = this; } } } [!output DIALOG_AUTO_PROXY_CLASS]::~[!output DIALOG_AUTO_PROXY_CLASS]() { // 若要在使用 Automation 建立了所有物件之後結束應用程式, // 解構函式必須呼叫 AfxOleUnlockApp。 // 此外,這會摧毀主對話方塊 if (m_pDialog != NULL) m_pDialog->m_pAutoProxy = NULL; AfxOleUnlockApp(); } void [!output DIALOG_AUTO_PROXY_CLASS]::OnFinalRelease() { // 當釋放 Automation 物件最後的參考時, // 會呼叫 OnFinalRelease。基底類別會自動 // 刪除物件。呼叫基底類別前,請先加入您物件所需的額外清除 (Cleanup) // 程式碼。 [!output DIALOG_AUTO_PROXY_BASE_CLASS]::OnFinalRelease(); } BEGIN_MESSAGE_MAP([!output DIALOG_AUTO_PROXY_CLASS], [!output DIALOG_AUTO_PROXY_BASE_CLASS]) END_MESSAGE_MAP() BEGIN_DISPATCH_MAP([!output DIALOG_AUTO_PROXY_CLASS], [!output DIALOG_AUTO_PROXY_BASE_CLASS]) END_DISPATCH_MAP() // 注意: 我們加入了對 IID_I[!output SAFE_PROJECT_IDENTIFIER_NAME] 的支援 // 以便從 VBA 支援型別安全繫結。此 IID 必須與 .IDL 檔中, // 附加至分配介面 (Dispinterface) 的 GUID 相符。 // {[!output DISPIID_REGISTRY_FORMAT]} static const IID IID_I[!output SAFE_PROJECT_IDENTIFIER_NAME] = [!output DISPIID_STATIC_CONST_GUID_FORMAT]; BEGIN_INTERFACE_MAP([!output DIALOG_AUTO_PROXY_CLASS], [!output DIALOG_AUTO_PROXY_BASE_CLASS]) INTERFACE_PART([!output DIALOG_AUTO_PROXY_CLASS], IID_I[!output SAFE_PROJECT_IDENTIFIER_NAME], Dispatch) END_INTERFACE_MAP() // 在此專案的 StdAfx.h 中定義 IMPLEMENT_OLECREATE2 巨集 // {[!output APP_CLSID_REGISTRY_FORMAT]} IMPLEMENT_OLECREATE2([!output DIALOG_AUTO_PROXY_CLASS], "[!output SAFE_PROJECT_IDENTIFIER_NAME].Application", [!output APP_CLSID_IMPLEMENT_OLECREATE_FORMAT]) // [!output DIALOG_AUTO_PROXY_CLASS] 訊息處理常式