Na, nézzük.

Miután ablakot már tudunk kirakni, próbáljunk meg adatot bekérni. Na persze ez nem nemgy csak úgy ripsz-ropsz. Mivel adatokról van szó, azokat ugye stílszerűen változókban illik tárolni. Ezért most először nem csak ide-oda kattintgatunk a menükben, hanem egy kis elméletet kell nézni. Mégpedig azt, hogy milyen változókat enged meg a Visual C.

A dolog ott kezdődik, hogy itt már nem csak a klasszikus értelemben vett változók léteznek, hanem már objektumok is. Az adaton kívül az adott típusra jellemző konverziós és kezelőfüggvényeket is tartalmazzák. Persze minden adattárolásnak azért az alaptípusok, potosabban az úgynevezett egyszerű típusok (Simple types) az alapjai. Tehát jöjjenek az egyszerű típusok. Természetesen a C-ben és a C++-ban használt összes típus használható. Ezeken kívül csak azt írom le, ami új. Na persze nem mind a 3 oldalt, csak a gyakrabban használatosakat. Ezeket a típusokat tulajdonképpen csak a paraméterátadásnál, visszatérési értékeknél, message handlereknél használjuk. Jó részüket csak a szabvány könyvtári híivásoknál kell elővennünk. Egy sima szám tárolása itt is egy egyszerű int -el történik. A string-ek tárolásánál nagyobb változások történtek. Itt van az az objektumos dolog. Na de nézzük akkor a gyakrabban használt egyszerű típusokat.

  • BOOL Boolean value

  • BSTR   32-bit character pointer

  • BYTE   8-bit integer that is not signed.

  • COLORREF 32-bit value used as a color value.

  • DWORD   32-bit unsigned integer or the address of a segment and its associated offset.

  • LONG    32-bit signed integer.

  • LPARAM  32-bit value passed as a parameter to a window procedure or callback function.

  • LPCSTR 32-bit pointer to a constant character string.

  • LPSTR 32-bit pointer to a character string.

  • LPCTSTR 32-bit pointer to a constant character string that is portable for Unicode and DBCS.

  • LPTSTR 32-bit pointer to a character string that is portable for Unicode and DBCS.

  • LPVOID 32-bit pointer to an unspecified type.

  • LRESULT 32-bit value returned from a window procedure or callback function.

  • UINT 16-bit unsigned integer on Windows versions 3.0 and 3.1; a 32-bit unsigned integer on Win32.

  • WNDPROC 32-bit pointer to a window procedure.

  • WORD 16-bit unsigned integer.

  • WPARAM value passed as a parameter to a window procedure or callback function: 16 bits on Windows versions 3.0 and 3.1; 32 bits on Win32.

A P-vel, vagy LP-vel kezdődő változók nem valódi pointerek, hanem csak úgynevezett handle-ek. Ez a handle egy címtáblázat egy elemére mutat, ami a cucc valódi címét tartalmazza. Szóval Visual C-ben, ahogy mellesleg JAVA-ban is, már nincsenek klasszsikus pointerek, amik meghatározott memóriaterületre mutatnakak.

Ezek lennének a lényegesebbek. 

A többi típust azért nem írom le, mert vagy ezekből, vagy az alaptípusokból származtathatóak, vagy nem nagyon van rá szükségünk.

Objektum típusúból (Simple value type) már kevesebb van. Ezekre az Objektumokra az a jellemző, hogy nincsenek sehonnan származtatva. Nem úgy, mint az a másik ötezer, aminek mind a CObject az alapja. Mint említettem, itt már nem csak az adat van tárolva, hanem egypár rá jellemző függvény is. 

Egyszerű érték típusok:

  • CPoint Egy abszolút koordináta tárolására való. (x,y) 
  • CRect Egy téglalap alakú terület bal felső és jobb alsó koordinátáit tartalmazza
  • CSize Egy relatív koordináta tárolása. X és Y irányú méret
  • CString Egy String tárolására való.
  • CTime Abszolút idő és dátum
  • CTimeSpan Relatív idő és dátum

Logikailag némileg nem stimmel, viszont kényelmi okokból maga az adat nem az objektum egy tagja (változója), hanem egyszerűen az objektum nevének leírásával hivatkozunk rá.

Ennyi elmélet után csináljunk valami programot.

Ugyanúgy kezdjük, mint eddig, Egy kis Application Wizard. Aztán rajzoljuk meg a kezdő ablakot. Mivel adatbekérést szeretnénk, nem árt, ha egy pár edit line-t is rakunk. Ezekután eresszünk rá egy Classwizard-ot a Dialog ablak Class-ára. Ráállunk a Classview-ban, és View/Classwizard. 
Itt az Add Variable-re kattintva bármelyik Control (Gomb, edit line stb) -hoz rendelhetünk változókat. Aminek az értékét később fel akarjuk használni, ahhoz rendeljünk. 
Csak a váltlozó nevét, kell beírni, a felkínált típus midig megfelelő.
A Classwizard elintézi a változók definícióját a class-hoz tartozó header-ben, a változó előkészítését a Class első függvényében, az adatcserét pedig a DoDataExchange-ben.
Ha meg akarjuk tudni a változóhoz rendelt elemek értékeit, az Update nevű függvényt kell hívni TRUE-val.

Update(TRUE);

Ez a függvény a Cwind objektum tagja, a Cdialog a Cwind-ből származik, tehát simán hívhatjuk. Ez a függvény végzi az adatcserét a változók és a hozzájuk rendelt Control-ok között. Ha TRUE-val hívjuk, a változókat feltölti az adatokkal, Ha FALSE-al, a változókban tárolt adatokat rakja be az ablakba. Mégpedig úgy, hogy közvetve meghívja a DoDataExchange-t. Mi ezt soha ne tegyük, mert elszáll a program.

Ha ezzel megvagyunk, készítsünk egy új Dialógusablakot. Egy pár Static Text-el. Mindegyiknek legyen saját ID-je. Ide fogjuk beírni az átvett adatokat. A hozzá tartozó Class-ot ClassWizard-dal elkészítjük úgy, hogy a static text-ekhez változókat rendelünk. Ha ez megvan, márcsak egy olyan függvényt kell hozzáadni a Class-hoz, ami ezeknek a változóknak értéket ad. Balgomb a ClassView-nál és add member function.

Itt meg kell adni a Függvény típusát, a deklarációját, az elérését. Ha csak egy sima függvény, akkor az alapbeállításokat el lehet fogadni. Ha ez megvan, csak meg kell írni a függvényt, és a másik Class-ból meghívni.

A függvény:

void CInfOutDlg::SetMyData(LPCSTR nev,LPCTSTR szam,LPCTSTR cim) {    //Adatok atvetele    m_cim = cim;    m_nev = nev;    m_szam = szam; }

Ezt  egy Handler-ből meghívva:

void CMythirdDlg::OnNext() {    // TODO: Add your control notification handler code here    UpdateData(TRUE);        //Adatok behuzasa a valtozokba    InfWin.SetMyData(nev,szam,cim); //Adatok atadasa    InfWin.DoModal();  //Ablak Inditasa    cim = _T("");     //Kezdo adatok    szam = _T("");    nev = _T("");    UpdateData(FALSE);    //toroljuk a beirt adatokat. }

A program működik.

Mára ennyit.