CALCDRIV 範例:展示 Automation 用戶端應用程式
更新:2007 年 11 月
CALCDRIV 範例是一個簡易的 Automation (先前稱為 OLE Automation) 用戶端應用程式。CALCDRIV 會驅動 MFCCALC 範例應用程式,這是一個提供基本計算機功能的 Automation 伺服程式。MFCCALC 有一個很簡單的計算機介面,與 Microsoft Windows「小算盤」應用程式的外觀很類似。
安全性注意事項: |
---|
這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。 |
若要取得範例和指示以便進行安裝:
按一下 Visual Studio [說明] 功能表上的 [範例]。
如需詳細資訊,請參閱尋找範例檔案。
最新版的完整範例清單可從 Visual Studio 2008 範例網頁 (英文) 取得。
您也可以將範例置於電腦硬碟中。根據預設,範例和讀我檔案都會複製到 \Program Files\Visual Studio 9.0\Samples\ 下的資料夾中。對於所有的 Visual Studio Express 版,所有範例都可在線上找到。
建置和執行範例
若要建置並執行 CALCDRIV 範例
執行 MFCCALC 的說明指令,建置並執行該專案。
開啟 calcdriv.sln 方案。
在 [建置] 功能表上按一下 [建置]。
注意事項: 如果您在建置 CALCDRIV 之前沒有先建置和登錄 MFCCALC,就會得到「無法建立 'MFCCALC.Application' 物件」的訊息。
執行 CALCDRIV 時將會出現「MFC 程式庫」的 [Calc Driver] 對話方塊,並啟動 MFCCALC 應用程式。您可以在這個時候直接使用 MFCCALC 的計算機介面,或是從 CALCDRIV 驅動 MFCCALC,如下所示:
在 MFC Calc Driver 的 [Expression] 方塊中,提供兩個以上以運算子 (+、-、* 或 /) 區隔的數字。
注意事項: MFCCALC 不會解譯括弧,也不會實作運算子優先順序。
按一下 [Go],讓 MFCCALC 在一個步驟中評估該運算式。
按一下 [Single Step],在一次逐步執行運算式的一個數字或運算子。
按一下 [Refresh],取得 MFCCALC 的狀態資訊 (Last Accum 和 Last Operand)。
使用 Dispatch 類別
CALCDRIV 使用 CRemoteCalcDlg 類別,如下所示:
CALCDRIV 的 CRemoteCalcDlg 類別代表 MFCCALC 的分派介面。CRemoteCalcDlg 類別是擁有一些特定 Automation 成員函式 (例如,CreateDispatch) 的 CCmdTarget 的衍生類別。
CDriverDlg 會內嵌一個 CRemoteCalcDlg 物件,即 m_calc。CRemoteCalcDlg 物件和它的內嵌 CDriverDlg 物件一樣,在 CALCDRIV 的大部分期執行期間內都是可用狀態。建構對話物件時也會建構 CRemoteCalcDlg。
CDriverDlg::OnInitDialog 呼叫 CRemoteCalcDlg 物件的 CCmdTarget::CreateDispatch。CreateDispatch 需要將名稱分派為第一個參數。通常,Automation 伺服程式應用程式的開發者會提供文件,來說明分派介面名稱、介面屬性和方法。另一種找尋 Automation 伺服程式應用程式分派名稱的方法是,使用 REGEDIT /v (顯示詳細資訊的選項) 來搜尋伺服器的 Windows 登錄。
CDriverDlg 會透過呼叫 MFCCALC 的 Button 方法來實作 CALCDRIV 的運算式評估工具,這種方法是在計算機對話方塊中不同按鈕的模擬器。
CDriverDlg 會呼叫 MFCCALC 的 GetOpnd 與 GetAccum 方法來實作 CALCDRIV 的 Refresh 函式。
CDriverDlg 解構函式會在 CALCDRIV 關閉時呼叫 MFCCALC 所顯露的 Quit 方法,以便關閉 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++ 精靈、程式庫以及編譯器方面的變更,不過還是可以示範如何完成您要進行的工作。 |