TN026: DDX i DDV procedur

Uwaga ta opisuje okno dialogowe wymiany danych (DDX) i okno dialogowe danych sprawdzanie poprawności (DDV) architektury. Ponadto opisuje jak napisać procedurę DDX_ lub DDV_ i w jaki sposób można rozszerzyć ClassWizard do korzystania z procedur.

Omówienie okna dialogowego wymiany danych

Wszystkie okna dialogowego dane funkcje są wykonane z kodu C++. Nie istnieją żadne specjalne zasoby lub Magiczna makra. Sercem mechanizmu jest wirtualny funkcji, która zostanie zastąpione każdej klasy okno dialogowe, że okna dialogowe wymiany danych i sprawdzania poprawności. Zawsze znajduje się w tym formularzu:

void CMyDialog::DoDataExchange (CDataExchange * pDX)
{
 nbsp;  CDialog::DoDataExchange(pDX);    / / wywołanie klasy podstawowej

//{{AFX_DATA_MAP(CMyDialog)
        <data_exchange_function_call>
        
    //}}AFX_DATA_MAP
}

Komentarze AFX specjalnego formatu umożliwia ClassWizard do zlokalizowania i edycji kodu w tej funkcji. Kod, który nie jest zgodny z ClassWizard powinny zostać umieszczony poza komentarze specjalnego formatu.

W powyższym przykładzie, lt; data_exchange_function_call > jest w formie:

    DDX_Custom (pDX, nIDC, pole)

i lt; data_validation_function_call > jest opcjonalny i jest w formie:

    DDV_Custom (pDX, pole,...)

Więcej niż jedna para DDX_/DDV_ mogą być zawarte w każdej funkcji DoDataExchange.

Zobacz 'afxdd_.h' dla listy wszystkich procedur wymiany danych okno dialogowe i okna dialogowego dane zatwierdzenie procedur z MFC.

Okno dialogowe danych jest tylko tym - dane Państwa w klasie CMyDialog . To nie jest przechowywana w struct lub żadnych specjalnych like that.

Notatki

Chociaż nazywamy to "dane okno dialogowe", wszystkie funkcje są dostępne w dowolnej klasy pochodzące z CWnd i nie są ograniczone do zaledwie kilka okien dialogowych.

Wartości początkowych danych są ustawione w konstruktora standardowej C++, zazwyczaj w bloku z //{{AFX_DATA_INIT i //}}AFX_DATA_INIT komentarze.

CWnd::UpdateData jest operacją, że zainicjowanie i obsługa błędów wokół wywołanie DoDataExchange.

CWnd::UpdateData można wywołać w dowolnym momencie przeprowadzenia wymiany danych i sprawdzania poprawności. Domyślnie w obsługi CDialog::OnOK domyślną jest nazywany UpdateData(TRUE) i UpdateData(FAŁSZ) nazywa się w domyślnym CDialog::OnInitDialog.

Rutynowe DDV_ należy natychmiast wykonaj rutynowych DDX_ dla tego pola.

Jak to działa?

Nie trzeba znać następujące w celu używania okna dialogowego dane. Jednak zrozumieć, jak to działa w tle pomoże Ci pisać własne procedury wymiany lub sprawdzania poprawności.

Funkcja Państwa DoDataExchange jest podobny funkcji składowej Serialize - jest ona odpowiedzialna za pobieranie lub ustawienie danych do/z postaci zewnętrznych (w tym przypadku formantów w oknie dialogowym) z/do danych w klasie. Parametr pDX jest kontekst dla czynności wymiany danych i jest podobna do parametru CArchive do CObject::Serialize. PDX (obiektu CDataExchange ) ma flagę kierunek, podobnie jak CArchive ma flagę kierunku

Sprawdzanie poprawności tylko wówczas, gdy m_bSaveAndValidate jest ustawiony. Wartość m_bSaveAndValidate jest określona przez parametr BOOL CWnd::UpdateData.

Istnieją trzy inne interesujące członków CDataExchange:

Użytkownika rozszerzeń

Rozszerzenie domyślnego mechanizmu DDX/DDV na wiele sposobów. Można:

Funkcji członek DoDialogExchange zawierają instrukcje warunkowe lub wszelkie inne ważne oświadczenia C++ z mieszany — wymiany i wywołania funkcji sprawdzania poprawności.

//{{AFX_DATA_MAP(CMyClass)
DDX_Check (pDX, IDC_SEX, m_bFemale);
DDX_Text (pDX, IDC_EDIT1, m_age);
//}}AFX_DATA_MAP
Jeżeli (m_bFemale)
    DDV_MinMax (pDX, wiek, 0, m_maxFemaleAge);
Else
    DDV_MinMax (pDX, wiek, 0, m_maxMaleAge)

Uwaga   Jak wykazano powyżej, taki kod nie mogą być edytowane przez ClassWizard i powinno być używane tylko poza z komentarzami specjalnego formatu.

Obsługa ClassWizard

ClassWizard obsługuje podzbiór dostosowania DDX/DDV, umożliwiając zintegrować swoje własne procedury DDX_ i DDV_ ClassWizard interfejs użytkownika. W ten sposób jest tylko koszty odsetek, jeśli jest planowane ponowne szczególnych procedur DDX i DDV time and time again w projekcie lub w wielu projektach.

W tym celu specjalne wpisy są dokonywane w DDX.CLW (poprzednie wersje Visual C++ przechowywane informacje w APSTUDIO.INI) lub w danym projekcie.CLW pliku. Specjalne wpisy mogą być wprowadzone w sekcji [generał Info] projektu.CLW pliku lub w sekcji [ExtraDDX] DDX.CLW pliku w folderze \Program Files\Microsoft Visual Studio\Visual C ++ katalogu \bin. Trzeba utworzyć DDX.Plik CLW, jeśli jeszcze nie istnieje. Jeśli zamierzasz używać niestandardowych procedur DDX_/DDV_ tylko w określonym projektem, należy dodać wpisy w sekcji [generał Info] projektu.CLW pliku zamiast. Jeśli zamierzasz używać procedur na wiele projektów, należy dodać wpisy w sekcji [ExtraDDX] DDX.CLW.

Ogólny format te specjalne wpisy:

ExtraDDXCount = n

; gdzie n jest numerem ExtraDDX? Linie wykonaj

ExtraDDX? = lt; klucze >; < vb klucze >; <prompt> <type> <initValue> <DDX_Proc> [; <DDV_Proc> <prompt1> <arg1> [<prompt2> <fmt2>]]

; W przypadku gdy? jest numerem wskazującym 1-n typu DDX w liście, który jest zdefiniowany.

Każde pole jest rozdzielany przez znaku ';'. Poniżej zostały opisane pola i cel.

lt; klucze & gt;

= Lista pojedyncze znaki wskazujące, dla których formanty okna dialogowego tego typu zmiennej jest dozwolone.

E = Edytuj

C = pole wyboru dwóch Państw

c = pole wyboru tri-state

R = pierwszy przycisk opcji w grupie

L =-sortowania listy

l = pole posortowanej listy

M = pole kombi (z edycji elementu)

N = upuszczania sortowana lista

n = lista sortowane kropla

1 = Wstaw DDX powi&nny zostać dodane do szefa listy (domyślnie jest dodawanie do ogona) nbsp; To jest zazwyczaj używany dla procedur DDX, które przenoszenia własności "Kontrola".

lt; vb klucze & gt;

to pole jest używane tylko w produkcie 16-bitowego dla formantów VBX (VBX formanty nie są obsługiwane w produkcie 32-bitowe)

lt; szybkie > =

ciąg znaków w polu kombi właściwości (nie cudzysłowów)

lt; typ > =

pojedynczy identyfikator typu do emitowania w pliku nagłówkowym. W naszym przykładzie powyżej z DDX_Time to będzie ustawione na CTime.

lt; vb klucze > =

nie używane w tej wersji i zawsze powinien być pusty

lt; initValue > =

początkowa wartość - 0 lub puste. Jeśli to pole jest puste, w sekcji //{{AFX_DATA_INIT pliku implementacji wypisywane linia nie inicjalizacji. Pusty wpis powinien być używany do obiektów C++ (np. CString, CTime itd.), które posiadają konstruktory, które gwarantują prawidłowe inicjowania.

lt; DDX_Proc > =

pojedynczy identyfikator procedury DDX_. Nazwa funkcji C++ musi rozpoczynać się "DDX_", ale nie obejmują "DDX_" w lt; DDX_Proc > identyfikator. W powyższym przykładzie identyfikator <DDX_Proc> byłoby czasu. Kiedy ClassWizard zapisuje wywołanie funkcji pliku implementacji w {{AFX_DATA_MAP sekcji, dołącza tę nazwę do DDX_, więc przybywających do DDX_Time.

lt; komentarz > =

uwaga Aby wyświetlić w oknie dialogowym Zmienna ze niniejszego DDX. Umieścić dowolny tekst, który byłby jak tutaj, zazwyczaj podasz coś opisującym operacje wykonywane przez parę DDX/DDV.

lt; DDV_Proc & gt;

Część DDV wpis jest opcjonalne. Nie wszystkie procedury DDX zostały odpowiednie procedury DDV. Często jest wygodniejszy sposób obejmują etap zatwierdzania jako integralną część transferu. Dotyczy to często podczas rutynowych DDV nie wymaga żadnych parametrów, ponieważ ClassWizard nie obsługuje DDV procedur bez żadnych parametrów.

= jednego identyfikatora dla procedury DDV_. Nazwa funkcji C++ musi rozpoczynać się "DDV_", ale nie obejmują "DDX_" w lt; DDX_Proc > identyfikator.

następuje 1 lub 2 args DDV:

lt; promptX > =

ciąg do miejsce powyżej elementu edycj&a (z amp; dla skrótu)

lt; fmtX > =

formatowanie znaków dla typu arg, jeden z

d = int

u = niepodpisanych

D = long int (to znaczy, long)

U = długi niepodpisane (DWORD)

f = pływak

F = podwójne

s = ciąg

Przykład niestandardowego DDX

Przykład niestandardowe DDX z sprawdzania poprawności można znaleźć w próbce MFC zaawansowane pojęcia CHKBOOK. Zobacz DDX_DollarsCents w DOLLCENT.CPP dla implementacja przykładowe niestandardowe rutynowych DDX i CHKBOOK.CLW na przykład odpowiadające ExtraDDXCount i ExtraDDX1 wpisy w sekcji [generał Info] CHKBOOK firmy.Plik CLW.

Uwagi techniczne przez liczbę |nbsp; Uwagi techniczne według kategorii

Index