CDataExchange 類別

支援 Microsoft Foundation 類別使用的對話方塊資料交換 (DDX) 和對話方塊資料驗證 (DDV) 常式。

語法

class CDataExchange

成員

公用建構函式

名稱 描述
CDataExchange::CDataExchange 建構 CDataExchange 物件。

公用方法

名稱 描述
CDataExchange::Fail 驗證失敗時呼叫。 將焦點重設為上一個控件,並擲回例外狀況。
CDataExchange::P repareCtrl 準備指定的控制項以進行數據交換或驗證。 用於非編輯控制件。
CDataExchange::P repareEditCtrl 準備指定的編輯控制項以進行資料交換或驗證。
CDataExchange::P repareOleCtrl 準備指定的 OLE 控制件以進行資料交換或驗證。 用於非編輯控制件。

公用資料成員

名稱 描述
CDataExchange::m_bSaveAndValidate DDX 和 DDV 方向的旗標。
CDataExchange::m_pDlgWnd 數據交換的對話框或視窗。

備註

CDataExchange 沒有基類。

如果您要為自定義數據類型或控件撰寫數據交換例程,或撰寫自己的數據驗證例程,請使用這個類別。 如需撰寫您自己的 DDX 和 DDV 例程的詳細資訊,請參閱 技術附註 26。 如需 DDX 和 DDV 的概觀,請參閱 對話框數據交換和驗證對話方塊

CDataExchange物件提供 DDX 和 DDV 進行所需的內容資訊。 當 DDX 用來填入資料成員之對話控制元件的初始值時,旗標m_bSaveAndValidate為 FALSE。 當 DDX 用來將對話框控制件的目前值設定為資料成員,以及使用 DDV 來驗證資料值時,旗標 m_bSaveAndValidate 為 TRUE。 如果 DDV 驗證失敗,DDV 程式會顯示一個消息框,說明輸入錯誤。 DDV 程式接著會呼叫 Fail 以將焦點重設為違規控件,並擲回例外狀況以停止驗證程式。

繼承階層架構

CDataExchange

需求

標題: afxwin.h

CDataExchange::CDataExchange

呼叫這個成員函式以建構 CDataExchange 物件。

CDataExchange(
    CWnd* pDlgWnd,
    BOOL bSaveAndValidate);

參數

pDlgWnd
包含控件之父視窗的指標。 這通常是 CDialog 衍生的物件。

bSaveAndValidate
如果為 TRUE,這個物件會驗證數據,然後將控件中的數據寫入成員。 如果為 FALSE,這個物件會將數據從成員移至控件。

備註

CDataExchange自行建構 物件,以將數據交換物件中儲存額外的資訊,以傳遞至視窗的 CWnd::D oDataExchange 成員函式。

範例

CYourDataExchange dx(this, FALSE);
try
{
   DoDataExchange(&dx);
}
catch (CUserException *pe)
{
   // some part of the exchange went wrong
   // but the user has already been notified
   pe->Delete();
}

CDataExchange::Fail

架構會在對話數據驗證 (DDV) 作業失敗時呼叫這個成員函式。

void Fail();

備註

Fail 會將焦點和選取專案還原至驗證失敗的控件(如果有要還原的控件)。 Fail然後擲回 CUserException 類型的例外狀況,以停止驗證程式。 例外狀況會導致顯示錯誤的消息框。 DDV 驗證失敗之後,用戶可以在違規控件中重新輸入數據。

當驗證失敗時,自定義 DDV 例程的實作者可以從其例程呼叫 Fail

如需撰寫您自己的 DDX 和 DDV 例程的詳細資訊,請參閱 技術附註 26。 如需 DDX 和 DDV 的概觀,請參閱 對話框數據交換和驗證對話框主題

CDataExchange::m_bSaveAndValidate

此旗標表示對話數據交換 (DDX) 作業的方向。

BOOL m_bSaveAndValidate;

備註

如果使用者 CDataExchange 編輯控件之後,物件用來將數據從對話框控件移至對話類別數據成員,則旗標為非零。 如果物件正用來從對話類別數據成員初始化對話控制件,則旗標為零。

在對話數據驗證期間,旗標也是非零值。

如需撰寫您自己的 DDX 和 DDV 例程的詳細資訊,請參閱 技術附註 26。 如需 DDX 和 DDV 的概觀,請參閱 對話框數據交換和驗證對話框主題

CDataExchange::m_pDlgWnd

包含 CWnd 物件的指標,其中對話資料交換 (DDX) 或驗證 (DDV) 正在進行中。

CWnd* m_pDlgWnd;

備註

此物件通常是 CDialog 物件。 自定義 DDX 或 DDV 例程的實作者可以使用這個指標來取得對話框視窗的存取權,其中包含其所操作的控件。

如需撰寫您自己的 DDX 和 DDV 例程的詳細資訊,請參閱 技術附註 26。 如需 DDX 和 DDV 的概觀,請參閱 對話框數據交換和驗證對話框主題

CDataExchange::P repareCtrl

架構會呼叫這個成員函式,為對話數據交換 (DDX) 和驗證 (DDV) 準備指定的控制項。

HWND PrepareCtrl(int nIDC);

參數

nIDC
要針對 DDX 或 DDV 準備的控件識別碼。

傳回值

針對 DDX 或 DDV 準備之控件的 HWND。

備註

改用 PrepareEditCtrl 進行編輯控件;將此成員函式用於所有其他控制件。

準備包含將控件的 HWND 儲存在 類別中 CDataExchange 。 架構會使用此句柄,在發生 DDX 或 DDV 失敗時,將焦點還原至先前的焦點控制件。

自定義 DDX 或 DDV 例程的實作者應該針對它們透過 DDX 交換資料或透過 DDV 驗證資料的所有非編輯控制項呼叫 PrepareCtrl

如需撰寫您自己的 DDX 和 DDV 例程的詳細資訊,請參閱 技術附註 26。 如需 DDX 和 DDV 的概觀,請參閱 對話框數據交換和驗證對話框主題

CDataExchange::P repareEditCtrl

架構會呼叫這個成員函式,為對話數據交換 (DDX) 和驗證 (DDV) 準備指定的編輯控制件。

HWND PrepareEditCtrl(int nIDC);

參數

nIDC
要針對 DDX 或 DDV 準備的編輯控制項識別碼。

傳回值

針對 DDX 或 DDV 準備的編輯控制項 HWND。

備註

請改為針對所有非編輯控件使用 PrepareCtrl

準備由兩件事組成。 首先, PrepareEditCtrl 將控件的 HWND 儲存在 類別中 CDataExchange 。 架構會使用此句柄,在發生 DDX 或 DDV 失敗時,將焦點還原至先前的焦點控制件。 其次, PrepareEditCtrl 在類別中 CDataExchange 設定旗標,指出要交換或驗證其數據的控件是編輯控件。

自定義 DDX 或 DDV 例程的實作者應該針對它們透過 DDX 交換資料或透過 DDV 驗證資料的所有編輯控制項呼叫 PrepareEditCtrl

如需撰寫您自己的 DDX 和 DDV 例程的詳細資訊,請參閱 技術附註 26。 如需 DDX 和 DDV 的概觀,請參閱 對話框數據交換和驗證對話框主題

CDataExchange::P repareOleCtrl

架構會呼叫這個成員函式,為對話數據交換 (DDX) 和驗證 (DDV) 準備指定的 OLE 控制件。

COleControlSite* PrepareOleCtrl(int nIDC);

參數

nIDC
要針對 DDX 或 DDV 準備的 OLE 控制項識別碼。

傳回值

OLE 控件網站的指標。

備註

改用 PrepareEditCtrl 進行編輯控件,或 針對所有其他非 OLE 控件使用 PrepareCtrl

自定義 DDX 或 DDV 例程的實作者應該呼叫 PrepareOleCtrl 所有 OLE 控件,這些控制件會透過 DDX 交換資料,或透過 DDV 驗證數據。

如需撰寫您自己的 DDX 和 DDV 例程的詳細資訊,請參閱 技術附註 26。 如需 DDX 和 DDV 的概觀,請參閱 對話框數據交換和驗證對話框主題

另請參閱

MFC 範例 VIEWEX
階層架構圖表
CWnd::D oDataExchange
CWnd::UpdateData