C++ pod Windows: 10. časť: Dialógy II

cplusplus.jpg Po me­sia­ci sa opäť stre­tá­va­me. Keď­že má­me dnes to­ho preb­rať neú­re­kom, po­ďme sa rad­šej hneď ve­no­vať na­ším di­aló­gom.

MEC­HA­NIZ­MY DDX A DDV
Ak ste do­te­raz pra­co­va­li s Vi­sual Ba­si­com (VB) ale­bo C++ Buil­de­rom, pre­dá­va­nie dát med­zi ov­lá­da­cí­mi pr­vka­mi di­aló­gov a pre­men­ný­mi v prog­ra­me ne­bol žia­den väč­ší prob­lém. Jed­no­duc­ho ste si za­de­fi­no­va­li ne­ja­kú pre­men­nú a tú­to pre­men­nú ste napl­ni­li dá­ta­mi po­mo­cou vlas­tnos­ti (Pro­per­ty) da­né­ho ov­lá­da­cie­ho pr­vku. (napr. vo VB: text=Text1.Text). Vo Vi­sual C++ to tak­to jed­no­duc­ho nej­de. Vi­sual C++ má za­de­fi­no­va­né pres­né po­stu­py a mec­ha­niz­my, ako sa mô­žu pre­ná­šať dá­ta z/do di­aló­gov. Tie­to mec­ha­niz­my sa na­zý­va­jú DDX (Di­alog Da­ta Exchan­ge) a DDV (Di­alog Da­ta Va­li­da­tion). Ako is­te už tu­ší­te, DDX umož­ňu­je vý­me­nu dát med­zi di­aló­gom a pre­men­nou (a sa­moz­rej­me nao­pak) a DDV ove­ru­je, či sa tie­to dá­ta rov­na­jú za­da­ným po­žia­dav­kám (t.j. napr. či ne­ma­jú väč­ší po­čet zna­kov, či sú z ur­či­té­ho roz­sa­hu a pod.) a tiež nas­ta­vu­je tie­to roz­sa­hy. Obid­va tie­to mec­ha­niz­my sú úz­ko spo­je­né s Class Wizar­dom (v ňom nap­rík­lad pri­ra­ďu­je­me ov­lá­da­cím pr­vkom pre­men­né) a fun­kcia­mi Up­da­te­Da­ta a Do­Da­taExchan­ge. Ich po­uži­te si te­raz uká­že­me na prík­la­de.

NÁŠ PRVÝ MODÁL­NY DI­ALÓG
Vy­tvor­te no­vú ap­li­ká­ciu po­mo­cou MFC AppWizar­du. (Tak ako do­te­raz, zvoľ­te SDI a os­tat­né nec­haj­te na de­fault). Naz­vi­me si ju jed­no­duc­ho Vy­me­na. (Pre is­to­tu si eš­te po­zri­te in­for­má­ciu o no­vom pro­jek­te, kto­rá je na obr. 1 a po­rov­naj­te si ju so svo­jou)

C++_10_obr1.jpg
Obr 1. In­for­má­cie o pro­jek­te Vy­me­na

Tak, te­raz keď už má­me vy­ge­ne­ro­va­nú kos­tru no­vej ap­li­ká­cie, po­ďme vy­tvo­riť no­vý zdroj di­aló­gu. Ako na­to? Klik­ni­te na zá­lož­ku Re­sour­ce View v pa­ne­li Wor­kspa­ce. Zob­ra­zia sa vám všet­ky zdro­je (Re­sour­ces), kto­ré pro­jekt ob­sa­hu­je. Troš­ku sa po­hraj­te a pres­kú­maj­te čo všet­ko tu je. (obr. 2)

C++_10_obr2.jpg
Obr. 2 Zdro­je pro­jek­tu Vy­me­na

Nás však te­raz naj­viac za­ují­ma­jú di­aló­gy. Na pri­da­nie no­vé­ho di­aló­gu, klik­ni­te pra­vým tla­čid­lom na kar­tu Di­alog a vy­ber­te In­sert Di­alog. Všim­ni­te si, že ak vy­be­rie­te len In­sert..., má­te na vý­ber o mno­ho viac mož­nos­tí. Keď vlo­ží­te no­vý di­alóg, mal by vy­ze­rať asi ako na obr 3.

C++_10_obr3.jpg
Obr 3 No­vý zdroj di­aló­gu

No­vé­mu di­aló­gu je auto­ma­tic­ky pri­ra­de­né ID: IDD_DIA­LOG1. Dob­re, di­alóg už má­me, po­ďme s ním za­čať pra­co­vať! Naj­prv pre po­hodl­nosť, kto chce mô­že si nas­ta­viť mriež­ku pre lep­šie a pres­nej­šie umies­tne­nie jed­not­li­vých ov­lá­da­cích pr­vkov. V dol­nej čas­ti ob­ra­zov­ky klik­ni­te na mriež­ku (Togg­le Grid), ako vi­dí­te na obr. 4.

C++_10_obr4.jpg
Obr. 4

Te­raz klik­ni­te pr­vým tla­čid­lom na di­alóg a z me­nu vy­ber­te Pro­per­ties. Vy­pl­ňte hla­vič­ku di­aló­gu (Cap­tion) tak, ako vi­dí­te na ob­ráz­ku 5. (zá­lož­ka Ge­ne­ral).

C++_10_obr5.jpg
Obr. 5 Hla­vič­ka di­aló­gu

Zá­klad­ný di­alóg má­me. Do di­aló­gu te­raz pri­daj­te dva po­pi­sy (Sta­tic Text), dve texto­vé po­lia (Edit Box) a jed­no tla­čid­lo (But­ton), us­po­ria­daj­te a po­me­nuj­te ich tak, ako vi­dí­te na obr. 6. Ak ne­vie­te, kto­rý ov­lá­da­cí pr­vok rep­re­zen­tu­je tá-kto­rá iko­na, po­mô­že vám obr. 7. Náz­vy (ID) jed­not­li­vých ov­lá­da­cích pr­vkov za­tiaľ nec­haj­te tak ako sú, zmeň­te len hla­vič­ku Cap­tion (po­stu­puj­te po­dob­ne ako pri zme­ne hla­vič­ky di­aló­gu, či­že klik­ni­te pra­vým tla­čid­lom na ov­lá­da­com pr­vku, vy­ber­te Pro­per­ties a v zá­lož­ke Ge­ne­ral do­píš­te Cap­tion).

C++_10_obr6.jpg
Obr. 6 Di­alóg Vý­me­na

C++_10_obr7.jpg
Obr. 7 Po­pis ikôn pre ov­lá­da­cie pr­vky di­aló­gu

Stlač­te te­raz kom­bi­ná­ciu klá­ves CTRL+T aby ste vi­de­li ako bu­de di­alóg v ap­li­ká­cií vy­ze­rať. Spo­koj­ní? Te­raz eš­te zme­ní­me náz­vy (ID) niek­to­rých pr­vkov. Texto­vé po­le za po­pi­som s hla­vič­kou: Za­daj­te Text naz­vi­te IDC_GET­NA­ME (pred­tým IDC_EDIT1). Tla­čid­lo s hla­vič­kou Sko­pí­ro­vať naz­vi­te IDC_CO­PY (pred­tým IDC_BUT­TON1) a po­sled­né texto­vé po­le naz­vi­te IDC_SHOWNA­ME (pred­tým IDC_EDIT2). V prí­pa­de tla­čid­la IDC_CO­PY klik­ni­te eš­te na zá­lož­ku Sty­les a za­škr­tni­te De­fault but­ton (obr. 8). To zna­me­ná, že to­to tla­čid­lo bu­de „pred­nas­ta­ve­né“ hneď po vy­vo­la­ní di­aló­gu a po stla­če­ní klá­ve­sy En­ter v di­aló­gu sa ak­ti­vu­je.

C++_10_obr8.jpg
Obr. 8 Nas­ta­ve­nie De­fault but­ton u tla­čid­la

Tak, vi­zuál­nu časť navr­ho­va­nia di­aló­gu má­me za se­bou. Po­ďme te­raz „za­kom­po­no­vať“ ten­to di­alóg do náš­ho prog­ra­mu. Chce­me, aby sa po klik­nu­tí ľa­vým tla­čid­lom do klien­tské­ho ok­na ap­li­ká­cie Vy­me­na zob­ra­zil di­alóg IDD_DIA­LOG1. Po­tom ak za­dá­me text do texto­vé­ho po­ľa IDC_GET­NA­ME a klik­ne­me na tla­čid­lo IDC_CO­PY (ale­bo stla­čí­me klá­ve­su EN­TER – viď. De­fault but­ton), text z po­ľa IDC_GET­NA­ME sa ob­ja­ví v po­li IDC_SHOWNA­ME). Z pros­tre­dia Di­alog Edi­to­ru spus­ťte Class Wizard (CTRL+W). Ten sa vás opý­ta, či chce­te vy­tvo­riť no­vú trie­du pre ten­to di­alóg (obr. 9a). Nec­haj­te za­škr­tnu­té Crea­te a new class a klik­ni­te na OK. Po­tom sa zob­ra­zí ďal­ší di­alóg, kto­rý vy­pl­ňte po­dľa ob­ráz­ka 9b. V jed­nej z úvod­ných čas­tí sme si po­ve­da­li, že všet­ky trie­dy od­vo­de­né od niek­to­rej z tried MFC sa po­dľa kon­ven­cie za­čí­na­jú pís­me­nom C, pre­to sa aj na­ša trie­da na­zý­va CVy­me­na­Dia­log. (Jej zá­klad­ná trie­da je trie­da MFC CDia­log). V tom­to di­aló­gu si eš­te všim­ni­te, že mu­sí­me pres­ne ur­čiť, kto­ré­mu di­aló­gu bu­de pat­riť no­vo vy­tvá­ra­ná trie­da (po­lož­ka Di­alog ID).

C++_10_obr9a.jpg
Obr. 9a Vy­tvo­re­nie no­vej trie­dy pre di­alóg

C++_10_obr9b.jpg
Obr. 9b Vy­tvo­re­nie no­vej trie­dy pre di­alóg

Keď už má­te spus­te­ný Class Wizard uis­ti­te sa, že v zoz­na­me Class na­me má­te trie­du CVy­me­na­Dia­log. Klik­ni­te na zá­lož­ku Mem­ber Va­riab­les. Zob­ra­zia sa vám všet­ky ov­lá­da­cie pr­vky, kto­ré sú na di­aló­gu IDD_DIA­LOG1. (obr. 10a). Te­raz po­stup­ne pri­daj­te všet­kým ov­lá­da­cím pr­vkom pre­men­né, po­dľa tab. 1. Pre­men­nú pri­dá­te tak, že sa nas­ta­ví­te na ten ov­lá­da­cí pr­vok, kto­ré­mu da­nú pre­men­nú pri­dá­va­te a klik­ne­te na tla­čid­lo Add Va­riab­le. Po­tom sa zob­ra­zí di­alóg ako na obr. 10b.

C++_10_obr10a.jpg
Obr. 10a Pri­dá­va­nie pre­men­ných k ov­lá­da­cím pr­vkom

C++_10_obr10b.jpg
Obr. 10b Pri­dá­va­nie pre­men­ných k ov­lá­da­cím pr­vkom

cplus.jpg Tab. 1 Po­me­no­va­nie pre­men­ných v di­aló­gu IDD_DIA­LOG1

Všim­ni­te si, že v prí­pa­de pre­men­ných m_edit­Get­Na­me a m_edit­ShowNa­me mô­že­te vo­liť aj maximál­nu dĺžku re­ťaz­ca (do­le v Class Wizar­de). Pre na­še po­tre­by za­daj­te max. dĺžku re­ťaz­ca na 25 zna­kov. Aby sa nie­čo vô­bec sta­lo, po klik­nu­tí na tla­čid­lo IDC_CO­PY, mu­sí­me eš­te pri­dať fun­kciu, kto­rá sa za­vo­lá po klik­nu­tí na to­to tla­čid­lo. V Class Wizar­de sa te­da vráť­te na zá­lož­ku Mes­sa­ge Maps a v trie­de CVy­me­na­Dia­log vy­hľa­daj­te v zoz­na­me Ob­ject Ids ob­jekt IDC_CO­PY. Po­tom mu pri­daj­te sprá­vu BN_CLIC­KED, kto­rá sa ob­ja­ví vpra­vo v zoz­na­me Mes­sa­ges. Jej me­no nec­haj­te „pred­nas­ta­ve­né“, či­že On­Co­py (obr. 11).

Za­vri­te Class Wizard a zmeň­te fun­kciu On­Draw trie­dy CVy­me­na­View tak­to:

void CVy­me­na­View::On­Draw(CDC* pDC)
{
	pDC->TextOut(0, 0, "Klik­ni­te tu ľa­vým tla­čid­lom na vy­vo­la­nie di­aló­gu Vy­me­na"); 
}

Te­raz už uží­va­teľ bu­de ve­dieť, čo má s ap­li­ká­ciou ro­biť. Aby sa ale di­alóg nao­zaj zob­ra­zil, up­rav­te eš­te fun­kciu OnL­But­ton­Down trie­dy CVy­me­na­View (to, že ju mu­sí­te naj­prv pri­dať po­mo­cou Class Wizar­du už ne­pí­šem, ma­lo by vám to byť jas­né).

void CVy­me­na­View::OnL­But­ton­Down(UINT nFlags, CPoint po­int) 
{
	CVy­me­na­Dia­log Vy­me­naDlg;
	Vy­me­naDlg.Do­Mo­dal(); 
}

Fun­kcia Do­Mo­dal (v na­šom prí­pa­de je to člen­ská fun­kcia trie­dy CDia­log) spô­so­bí nah­ra­nie zdro­ju di­aló­gu a je­ho nás­led­né zob­ra­ze­nie. Keď tá­to fun­kcia zob­ra­zí mo­dál­ny di­alóg, uží­va­teľ ne­mô­že pra­co­vať s ap­li­ká­ciou až po­kým nie je ok­no toh­to di­aló­gu za­vre­té (pres­ne sme si to­to opi­so­va­li v pred­chád­za­jú­cej čas­ti). Aby prek­la­dač spoz­nal trie­du CVy­me­na­Dia­log, pri­daj­te eš­te na za­čia­tok sú­bo­ru Vy­me­na­View.cpp ten­to ria­dok:

#in­clu­de "Vy­me­na­Dia­log.h"

Skús­te te­raz ap­li­ká­ciu pre­lo­žiť a spus­tiť. Po klik­nu­tí ľa­vým tla­čid­lom my­ši do ok­na sa zob­ra­zí di­alóg. Do oboch texto­vých po­lí sí­ce mô­že­te vpi­so­vať text, ale po stla­če­ní tla­čid­la s ná­pi­som Sko­pí­ro­vať sa nič nes­ta­ne (čo je ale cel­kom lo­gic­ké, keď­že sme za­tiaľ nep­ri­da­li žia­den kód do fun­kcie On­Co­py). Te­raz to nap­ra­ví­me. V zdro­jo­vom sú­bo­re trie­dy CVy­me­na­Dia­log vy­hľa­daj­te fun­kciu On­Co­py a zmeň­te jej te­lo tak­to:

void CVy­me­na­Dia­log::On­Co­py() 
{
	//sko­pí­ru­je­me dá­ta z ov­lá­da­cích pr­vkov do pre­men­ných 
Up­da­te­Da­ta(TRUE);
	m_edit­ShowNa­me=m_edit­Get­Na­me;
	//sko­pí­ru­je­me dá­ta z pre­men­ných do ov­lá­da­cích pr­vkov
	Up­da­te­Da­ta(FAL­SE);
}

Ta­jom­ná fun­kcia Up­da­te­Da­ta uro­bí vlas­tne ce­lú prá­cu za nás. Mô­že vy­ko­ná­vať tri ope­rá­cie. Mô­že ko­pí­ro­vať dá­ta z ov­lá­da­cie­ho pr­vku do pre­men­nej, mô­že ko­pí­ro­vať dá­ta z pre­men­nej do ov­lá­da­cie­ho pr­vku a rov­na­ko mô­že aj ove­ro­vať dá­ta, kto­ré uží­va­teľ za­dal v ov­lá­da­com pr­vku. Ak má pa­ra­me­ter TRUE, tak vte­dy sa ko­pí­ru­jú dá­ta z ov­lá­da­cie­ho pr­vku do pre­men­nej a ak má pa­ra­me­ter FAL­SE tak nao­pak. V kni­he Prog­ra­mu­je­me v ja­zy­ce Vi­sual C++, (Mark An­drews, Com­pu­ter Press, 1997) je po­uži­tý za­ují­ma­vý trik na za­pa­mä­ta­nie, v kto­rom sme­re sa pre­sú­va­jú dá­ta. V zdro­jo­vom sú­bo­re trie­dy di­aló­gu autor po­užil di­rek­tí­vy #de­fi­ne nas­le­dov­ne:

#de­fi­ne VAR2CTRL   FAL­SE
#de­fi­ne CTRL2VAR   TRUE

(VAR2CTRL – Va­riab­le To Con­trol)
(CTRL2VAR – Con­trol To Va­riab­le)

Na­ša fun­kcia On­Co­py by s tý­mi­to di­rek­tí­va­mi vy­ze­ra­la tak­to: (ne­za­bud­ni­te ich ale pri­dať na za­čia­tok sú­bo­ru Vy­me­na­Dia­log.cpp)

void CVy­me­na­Dia­log::On­Co­py() 
{
	//sko­pí­ru­je­me dá­ta z ov­lá­da­cích pr­vkov do pre­men­ných 
	Up­da­te­Da­ta(CTRL2VAR);
	m_edit­ShowNa­me=m_edit­Get­Na­me;
	//sko­pí­ru­je­me dá­ta z pre­men­ných do ov­lá­da­cích pr­vkov
	Up­da­te­Da­ta(VAR2CTRL);
}

Te­raz, keď spus­tí­te ap­li­ká­ciu a vy­vo­lá­te di­alóg, po na­pí­sa­ní textu do hor­né­ho texto­vé­ho po­ľa a stla­če­ní klá­ve­sy EN­TER ale­bo klik­nu­tí na tla­čid­lo s textom Sko­pí­ro­vať (čo je vlas­tne jed­no a to is­té), text z hor­né­ho po­ľa sa zob­ra­zí v dol­nom texto­vom po­li (obr. 12.) Ak sa po­kú­si­te na­pí­sať text dl­hší ako 25 zna­kov, ne­bu­de vám to umož­ne­né. Spô­so­bí to prá­ve mec­han­izmus DDV, kto­rý kon­tro­lu­je dĺžku oboch re­ťaz­cov v texto­vých po­liach.

FUN­KCIA Do­Da­taExchan­ge V PROG­RA­MOCH
Na za­čiat­ku sme pí­sa­li, že na vý­me­ne dát sa zú­čas­tňu­jú dve fun­kcie: Up­da­te­Da­ta a Do­Da­taExchan­ge. Pr­vú sme si už opí­sa­li, te­raz sa po­zri­me na dru­hú. Je to člen­ská fun­kcia trie­dy CWnd a je vo­la­ná fun­kciou Up­da­te­Da­ta. Tú­to fun­kciu by sme nik­dy ne­ma­li vo­lať pria­mo, vždy by sme ju ma­li naj­prv za­vo­lať fun­kciu Up­da­te­Da­ta a nec­hať na nej vo­la­nie fun­kcie Do­Da­taExchan­ge. Tu je kód tej­to fun­kcie ako vy­ze­rá v ap­li­ká­cií Vy­me­na:

void CVy­me­na­Dia­log::Do­Da­taExchan­ge(CDa­taExchan­ge* pDX)
{
	CDia­log::Do­Da­taExchan­ge(pDX);
	//{{AFX_DA­TA_MAP(CVy­me­na­Dia­log)
	DDX_Con­trol(pDX, IDC_CO­PY, m_btnCo­py);
	DDX_Text(pDX, IDC_SHOWNA­ME, m_edit­ShowNa­me);
	DDV_MaxChars(pDX, m_edit­ShowNa­me, 25);
	DDX_Text(pDX, IDC_GET­NA­ME, m_edit­Get­Na­me);
	DDV_MaxChars(pDX, m_edit­Get­Na­me, 25);
	//}}AFX_DA­TA_MAP
}

Ok­rem vo­la­nia vý­me­ny dát (pre­fix DDX), mô­že­te v tom­to vý­pi­se náj­sť aj vo­la­nie s pre­fixom DDV. To­to vo­la­nie nes­pô­so­bu­je žia­den pre­nos dát, len nas­ta­vu­je maximál­ne, resp. mi­ni­mál­ne hod­no­ty, aké mô­že pre­men­ná pri­ra­de­ná ov­lá­da­cie­mu pr­vku na­do­bú­dať. Keď si po­zor­nej­šie prez­rie­te ten­to kód zis­tí­te, že je tu vlas­tne to, čo ste pri­dá­va­li po­mo­cou Class Wizar­du. A opäť, ako to­mu bo­lo v prí­pa­de pri­dá­va­nia ob­slu­hy správ, kód pri­da­ný Class Wizar­dom je umies­tne­ný med­zi cha­rak­te­ris­tic­ké ko­men­tá­re. Vo fun­kcii Do­Da­taExchan­ge sú to:

//{{AFX_DA­TA_MAP(CVy­me­na­Dia­log) – za­čia­tok blo­ku
//}}AFX_DA­TA_MAP – ko­niec blo­ku

C++_10_obr11.jpg
Obr. 11 Pri­da­nie fun­kcie na ob­slu­hu stla­če­nia tla­čid­la

C++_10_obr12.jpg
Obr. 12 Kon­co­vý di­alóg ap­li­ká­cie Vy­me­na

Na me­cha­niz­moch DDX a DDV sa eš­te zú­čas­tňu­je aj kód med­zi blok­mi AFX_DA­TA_INIT. V na­šej ap­li­ká­cií Vy­me­na náj­de­te tie­to ko­men­tá­re v te­le konštruk­to­ra di­aló­gu:

	//{{AFX_DA­TA_INIT(CVy­me­na­Dia­log)
	m_edit­ShowNa­me = _T("");
	m_edit­Get­Na­me = _T("");
	//}}AFX_DA­TA_INIT

Kód med­zi tý­mi­to blok­mi pri­po­ju­je pre­men­né k ov­lá­da­cím pr­vkom. Tie­to blo­ky AFX_DA­TA_INIT a AFX_DA­TA_MAP náj­de­te vždy v zdro­jo­vom sú­bo­re trie­dy di­aló­gu. Tre­tí a po­sled­ný blok tý­ka­jú­ci sa pre­no­su dát, kto­rý pri­dá do váš­ho prog­ra­mu Class Wizard je umies­tne­ný v hla­vič­ko­vom sú­bo­re trie­dy di­aló­gu. V na­šom sú­bo­re Di­alog­Vy­me­na.h vy­ze­rá tak­to:

	//{{AFX_DA­TA(CVy­me­na­Dia­log)
	enum { IDD = IDD_DIA­LOG1 };
	CBut­ton	m_btnCo­py;
	CString	m_edit­ShowNa­me;
	CString	m_edit­Get­Na­me;
	//}}AFX_DA­TA

Ten­to blok dek­la­ru­je pre­men­né pri­po­je­né k ov­lá­da­cím pr­vkom.

FAQ
Q: V kto­rých sú­bo­roch náj­dem te­lá fun­kcií ako napr. Win­Main, Run, OnId­le?
A: Fun­kcia Win­Main je v sú­bo­re win­main.cpp, kto­rý náj­de­te pod ad­re­sá­rom VC98\MFC\SRC. Fun­kcie Run a OnId­le sú v sú­bo­re ap­pco­re.cpp. Ďal­šie fun­kcie, kto­ré tvo­ria jad­ro ap­li­kač­né­ho sys­té­mu tiež náj­de­te v tom­to ad­re­sá­ri.

TI­PY NA DO­MA
Po­hraj­te sa troc­hu s di­aló­gom Vy­me­na. Skús­te pri­dať ďal­šie pr­vky, na kto­rých od­skú­ša­te fun­kciu DDX a DDV mec­ha­niz­mov. Ne­za­daj­te nič do po­ľa max. po­čet zna­kov pri texto­vom po­li IDC_GET­NA­ME. Skús­te pria­mo vo fun­kcii On­Co­py pre­viesť vlas­tnú kon­tro­lu, či je za­da­ný re­ťa­zec krat­ší ale­bo rov­ný ako 15 zna­kov. Ak nie je, vy­píš­te o tom uží­va­te­ľo­vi sprá­vu po­mo­cou fun­kcie Mes­sa­ge­Box.

NA­BUDÚCE
Eš­te zďa­le­ka prob­le­ma­ti­ku di­aló­gov neu­zat­vá­ra­me. Na­bu­dú­ce vy­tvo­rí­me veľ­ký mo­dál­ny di­alóg, kto­rý bu­de ob­sa­ho­vať tak­mer všet­ky pr­vky, kto­ré sa na di­alóg mô­žu umies­tňo­vať (ok­rem spo­loč­ných ov­lá­da­cích pr­vkov Win­dows, ich po­uži­tie s i uká­že­me až o dva me­sia­ce). Te­ším sa na stret­nu­tie o me­siac.

Ďal­šie čas­ti >>

Zdroj: PC Revue 5/2001



Ohodnoťte článok:
   
 

24 hodín

týždeň

mesiac

Najnovšie články

C++ pod Win­dows: 1. časť: Úvod
Vítam vás pri novom seriáli o programovaní. Ako z názvu môžete usúdiť, pôjde o programovanie pod operačným systémom Microsoft Windows využitím jazyka C++. čítať »
 
C++ pod Win­dows: 26. časť: Zá­ver
V tejto časti sa pri seriáli C++ pod Windows stretávame naposledy. Predchádzajúcich 25 častí bolo venovaných čisto programovaniu a riešeniu rôznych programátorských úloh. čítať »
 
C++ pod Win­dows: 25. časť: Ac­ti­veX & DLL
Vítam vás pri predposlednej časti seriálu C++ pod Windows. Či už ju čítate na Slovensku v prehriatej kancelárii, alebo niekde v Karibiku s nohami namočenými v mori čítať »
 
C++ pod Win­dows: 24. časť: How to... II
Čo sme načali v predchádzajúcej časti, tým budeme teraz pokračovať. Pozrieme sa na tlač a komponenty ActiveX. Opäť uplatníme čisto praktický (how-to) prístup čítať »
 
C++ pod Win­dows: 23. časť: How to... I
Vítam vás pri ďalšom pokračovaní seriálu. V predchádzajúcej časti sme dobrali všetko, čo som na začiatku označil ako rozumný základ, po ktorého zvládnutí budete pripravení na získavanie ďalších vedomostí čítať »
 
C++ pod Win­dows: 22. časť: Se­ria­li­zá­cia ap­li­ká­cií MDI
Nastal máj, lásky čas. Dúfam, že keď čítate tieto riadky, počasie sa už umúdrilo a je pekne teplo a slnečno, tak ako sa na máj patrí. čítať »
 
C++ pod Win­dows: 21. časť: Se­ria­li­zá­cia SDI ap­li­ká­cií II.
Vítam vás pri ďalšom pokračovaní nášho rozprávania o programovaní pod Windows. V tejto časti uvedením ukážkového príkladu dokončíme opis serializácie aplikácií SDI. čítať »
 
C++ pod Win­dows: 20. časť: Se­ria­li­zá­cia SDI ap­li­ká­cií I
V tejto časti budeme pokračovať v začatom rozprávaní o serializácii a preberieme si serializáciu aplikácií typu SDI (Single Document Interface). čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter