C++ pod Windows: 13. časť: Dialógy V.

cplusplus.jpg V úvo­de by som sa eš­te rád vrá­til k je­de­nás­tej čas­ti. Ne­ja­ko som sa vte­dy nec­hal pri pí­sa­ní „uniesť“, a pre­to bo­la tá­to časť pridl­há na to, aby sa ce­lá zmes­ti­la do jed­né­ho čís­la. Z to­ho dô­vo­du bol zdro­jo­vý kód k FAQ umies­tne­ný na webe a z rov­na­ké­ho dô­vo­du ne­bo­la v tej­to čas­ti uve­rej­ne­ná do­má­ca úlo­ha (i keď jej rie­še­nie sa mož­no ob­ja­vi­lo v dva­nás­tej čas­ti – ne­viem to ur­či­te, keď­že v ča­se pí­sa­nia tej­to čas­ti eš­te ne­vyš­lo jú­lo­vé čís­lo). OK, na­bu­dú­ce sa bu­dem „kro­tiť“, aby k po­dob­ným prob­lé­mom už ne­doš­lo. A eš­te jed­na po­zná­moč­ka k je­de­nás­tej čas­ti. Vo vý­pi­se fun­kcie OnI­nit­Dia­log sa vy­skyt­la chy­bič­ka. Pri vo­la­ní fun­kcie Auto­Load mal byť jej pr­vým pa­ra­met­rom ná­zov ov­lá­da­cie­ho pr­vku nie IDC_BUT, ale IDC_FO­TO (ako bo­lo uve­de­né v po­znám­ke). Ten­to prob­lém tiež sú­vi­sel s do­má­cou úlo­hou (kde bol je­ho pres­ný opis), kaž­do­pád­ne sa za tú­to chy­bu os­pra­vedl­ňu­jem.

C++_13_obr1.jpg
Obr. 1 No­vá trie­da pre di­alóg

WIN­DOWS COM­MON CON­TROLS
Ov­lá­da­cie pr­vky, kto­ré sme do­te­raz pre­be­ra­li, by sa da­li naz­vať aj štan­dar­dné ov­lá­da­cie pr­vky. Štan­dar­dné pre­to, le­bo svo­jím spô­so­bom exis­to­va­li už aj v star­ších ver­ziách Win­dows (star­ších ako W95, resp. WNT 3.51). Ale keď priš­li na trh „úžas­né“ Win­dows 95 (a WNT 3.51), do ro­di­ny ov­lá­da­cích pr­vkov pri­bud­li ďal­ší čle­no­via. Väč­ši­na z nich je len akým­si roz­ší­re­ním a dopl­ne­ním tých štan­dar­dných, či už o gra­fi­ku, ale­bo o no­vé me­tó­dy. Net­re­ba ich však po­va­žo­vať za ne­pot­reb­né, ve­ľak­rát mô­žu pred­sta­vo­vať to pra­vé, čo va­šu ap­li­ká­ciu – pres­nej­šie di­aló­gy v nej – spreh­ľad­ní a oži­ví. Všet­ky „spo­loč­né“ ov­lá­da­cie pr­vky Win­dows sú v tab. 1 spo­lu s pris­lúc­ha­jú­cou trie­dou kniž­ni­ce MFC a krát­kym opi­som. Ak ste sa s niek­to­rý­mi do­te­raz nes­tret­li, pre lep­šie po­cho­pe­nie väč­ši­nu ov­lá­da­cích pr­vkov uve­de­ných v tab. 1 si mô­že­te po­zrieť v hel­pe aj na ob­ráz­koch, čo as­poň troc­hu zo za­čiat­ku po­mô­že.

cplus.jpg
Tab. 1 Spo­loč­né ov­lá­da­cie pr­vky Win­dows (od W95)

PRÍKLAD
Keď už vie­te, kto­ré sú spo­loč­né ov­lá­da­cie pr­vky a ako vy­ze­ra­jú, uve­die­me si krát­ky prík­lad, na kto­rom si uká­že­me „prog­ra­mo­va­nie“ tých naj­roz­ší­re­nej­ších. Bu­dú to: Ani­má­cia, Bež­ec, Zoz­nam ob­ráz­kov, Preh­lia­dač zoz­na­mov a Strom. Po­ďme na to! Vy­tvor­te no­vý pro­jekt s vlas­tnos­ťa­mi, ako mal Bi­gDlg (SDI a Fi­nish). Naz­vi­te ho jed­no­duc­ho Con­trols. Vy­tvor­te di­alóg, je­ho ID nec­haj­te IDD_DIA­LOG1, hla­vič­ku zmeň­te na: Spo­loč­né ov­lá­da­cie pr­vky. Spus­ťte Class Wizard a pri­daj­te no­vú trie­du pre di­alóg: CSpolDlg (obr. 2). Eš­te urob­te „štan­dar­dné“ ope­rá­cie, do trie­dy po­hľa­du pri­daj­te ob­slu­hu sprá­vy WM_LBUT­TON­DOWN, v jej ob­služ­nej fun­kcii vy­vo­laj­te di­alóg, zmeň­te fun­kciu On­Draw a „in­clu­duj­te“ hla­vič­ko­vý sú­bor di­aló­gu (všet­ko ako v prí­pa­de Bi­gDlg). Či­že na za­čia­tok zdro­jo­vé­ho sú­bo­ru trie­dy po­hľa­du pri­daj­te jed­nu di­rek­tí­vu in­clu­de:

#in­clu­de "SpolDlg.h"

Zmeň­te kód vo fun­kcii On­Draw:

void CCon­trol­sView::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 SpolDlg");
}

Po­mo­cou Class Wizar­du na­ma­puj­te sprá­vu WM_LBUT­TON­DOWN  a zmeň­te te­lo jej ob­služ­nej fun­kcie:

void CCon­trol­sView::OnL­But­ton­Down(UINT nFlags, CPoint po­int) 
{
	CSpolDlg spolDlg;

	spolDlg.Do­Mo­dal(); 
}

Ne­bo­lo by zlé v tej­to fá­ze prog­ram skom­pi­lo­vať a zlin­ko­vať a za­chy­tiť tak pr­vé chy­bič­ky. PRIDÁVA­NIE OVLÁDACÍCH PR­VKOV. Po týc­hto „príp­rav­ných“ prá­cach mô­že­me za­čať pri­dá­vať jed­not­li­vé ov­lá­da­cie pr­vky. Eš­te az­da uve­diem, že kaž­dý z pri­dá­va­ných ov­lá­da­cích pr­vkov má ove­ľa viac fun­kcií a vlas­tnos­tí, kto­rý­mi ho mô­že­me ov­lá­dať, ako tie, kto­ré si tu spo­me­nie­me. My tu však uve­die­me len tie naj­zák­lad­nej­šie, dô­le­ži­té pri „kla­sic­kom“ po­uží­va­ní da­né­ho pr­vku. Ďal­šie in­for­má­cie zís­ka­te ľah­ko v hel­pe. Umies­tne­nie jed­not­li­vých ov­lá­da­cích pr­vkov vi­dí­te na obr. 3. Už ne­bu­dem po­drob­ne roz­pi­so­vať pri­dá­va­nie vy­svet­ľu­jú­cich po­pi­sov k ov­lá­da­cím pr­vkom, pri nich sta­čí vždy zme­niť len hla­vič­ku (Ani­má­cia, Bež­ec atď.).

C++_13_obr2.jpg
Obr. 2 Di­alóg v „na­sa­de­ní“

Ani­má­cia: Aj keď sa to nez­dá, ani­má­cia sa v prog­ra­moch vy­sky­tu­je dosť čas­to (napr. ani­mo­va­né lo­go fir­my, zob­ra­ze­nie ko­pí­ro­va­nia sú­bo­rov). Pre­to si prá­cu s ňou opí­še­me. Po­dľa obr. 7 z de­sia­tej čas­ti vy­ber­te ov­lá­da­cí pr­vok ani­má­cia (ID nec­haj­te de­fault) a pri­daj­te ho na di­alóg, pri­čom vy­tvor­te štvo­rec s roz­mer­mi prib­liž­ne 50 × 40 (po­dľa roz­me­ru v pra­vej dol­nej čas­ti sta­vo­vé­ho riad­ka VC++). Pod to umies­tni­te tla­čid­lo, kto­ré bu­de slú­žiť na spus­te­nie ani­má­cie. ID tla­čid­la zvoľ­te IDC_PLAY a hla­vič­ku: Spus­ti. Aby sme ne­ja­ko moh­li pris­tu­po­vať k to­mu­to ov­lá­da­cie­mu pr­vku (ani­má­cii), mu­sí­me eš­te vy­tvo­riť pre­men­nú, kto­rá mu bu­de pri­ra­de­ná (bu­de je­ho člen­skou pre­men­nou). Spus­ťte Class Wizard, v po­li so zoz­na­mom Class Na­me vy­ber­te CSpolDlg, klik­ni­te na kar­tu Mem­ber Va­riab­les, v zoz­na­me vy­ber­te IDC_ANI­MA­TE a klik­ni­te na Add Va­riab­le. Di­alóg vy­pl­ňte po­dľa obr. 4.

C++_13_obr3.jpg
Obr. 3 Člen­ská pre­men­ná di­aló­gu pri­ra­de­ná ov­lá­da­cie­mu pr­vku IDC_ANI­MA­TE

Keď už ste v Class Wizar­de, klik­ni­te späť na kar­tu Mes­sa­ge Maps a v rov­na­kej trie­de pri­daj­te tla­čid­lu IDC_PLAY ob­slu­hu sprá­vy BN_CLIC­KED a klik­ni­te na Edit Co­de. Pri­daj­te kód do tej­to fun­kcie, ako vi­dí­te tu:

void CSpolDlg::On­Play() 
{
	// ot­vo­rí­me sú­bor s ani­má­ciou
	m_ctrlA­ni­ma­te.Open("di­llo.avi");
	// preh­rá­me ani­má­ciu
	m_ctrlA­ni­ma­te.Play(0,0xFFFF,1); 
}

To­to rie­še­nie pred­pok­la­dá, že v ad­re­sá­ri pro­jek­tu má­te sú­bor di­llo.avi. (je dos­tup­ný na MSDN Lib­ra­ry CD 1 ako sú­bor v pro­jek­te Cmnctrl1). Ak ne­má­te ten­to sú­bor, po­uži­te iný, mu­sí však spĺňať po­dmien­ky uve­de­né v tab. 1 (po­drob­ne viď. help). Skús­te si na do­má­cu úlo­hu pri­dať ten­to sú­bor do zdro­jov (no­vý zdroj naz­vi­te, ako chce­te) a po­tom zmeň­te vo­la­nie fun­kcie Open. Je to jed­no­duc­hé.

Bež­ec: Za­bud­ni­te na po­suv­ní­ky! Ak bu­de­te chcieť uro­biť nie­čo ta­ké, čo ro­bi­li v Bi­gDlg po­suv­ní­ky IDC_ROC­NIK a IDC_PROS­PECH, kniž­ni­ca MFC vám po­nú­ka lep­šie rie­še­nie. Je ním bež­ec (sli­der), kto­rý je ľah­šie „prog­ra­mo­va­teľ­ný“ ako po­suv­ní­ky. Pre je­ho „spo­jaz­dne­nie“ do­kon­ca ne­mu­sí­te ma­po­vať sprá­vy WM_HSCROLL a WM_VSCROLL (ak te­da nec­hce­te zob­ra­zo­vať po­zí­ciu bež­ca). My si nap­rog­ra­mu­je­me bež­ec, kto­rý sa bu­de po­hy­bo­vať po „sko­koch“, kto­ré mu my ur­čí­me, a svo­ju po­zí­ciu nám bu­de uka­zo­vať rov­na­ko ako pri po­suv­ní­koch, plus je­ho re­la­tív­nu po­zí­ciu bu­de­me vi­dieť aj na ňom sa­mot­nom (tzv. Ticks). Pri­daj­te pod tla­čid­lo IDC_PLAY je­den po­suv­ník a hneď ved­ľa (nap­ra­vo) je­den po­pis (na uká­za­nie hod­no­ty, kto­rej zod­po­ve­dá ak­tuál­na po­zí­cia bež­ca). Do ID bež­ca na­píš­te IDC_BE­ZEC, na kar­te Sty­les za­škr­tni­te vlas­tnos­ti Tick marks a Auto ticks. ID po­pi­su zmeň­te na IDC_STA­TIC_BE­ZEC.

Po­mo­cou Class Wizar­du pri­daj­te člen­skú pre­men­nú pre ov­lá­da­cí pr­vok Bez­ec, kto­rá je ty­pu in­te­ger, a naz­vi­te ju m_nBe­zec(po­dob­ne ako pri ani­má­cii). Bu­de pred­sta­vo­vať po­zí­ciu bež­ca. Keď­že chce­me, aby sa bež­ec po­hy­bo­val po na­mi ur­če­ných sko­koch (daj­me to­mu, že ich bu­de 10), pri­daj­te (už nie po­mo­cou Class Wizar­du) eš­te do toh­to sú­bo­ru súk­rom­né sta­tic­ké (to je dô­le­ži­té) po­le nSkok pre­men­ných ty­pu in­te­ger (sa­mot­né „sko­ky“ nas­ta­ví­me až v zdro­jo­vom sú­bo­re).

pri­va­te:
	sta­tic int nSkok[10];

Tým by bo­li úp­ra­vy hla­vič­ko­vé­ho sú­bo­ru do­kon­če­né. Ide­me do zdro­jo­vé­ho sú­bo­ru di­aló­gu. Na za­čia­tok (za di­rek­tí­vy prep­ro­ce­so­ra) napl­ňte po­le ur­ču­jú­ce bež­co­ve „sko­ky“. Nap­rík­lad tak­to:

int nSkok[10]={10, 20, 30, 40, 50, 60, 70, 80, 90, 100};

Po­dob­ne ako pri po­suv­ní­koch aj tu mu­sí­me za­dek­la­ro­vať uka­zo­va­teľ na ten­to ov­lá­da­cí pr­vok a nas­ta­viť roz­sah. Opäť vy­uži­je­me fun­kciu OnI­nit­Dia­log, kto­rá je na to naj­vhod­nej­šia. Zmeň­te jej te­lo tak­to:

BOOL CSpolDlg::OnI­nit­Dia­log() 
{
	CString str­Text;
	CSli­derCtrl* pBe­zec=(CSli­derCtrl*) GetDl­gI­tem(IDC_BE­ZEC);

	pBe­zec->Set­Ran­ge(0, 9);
	pBe­zec->Set­Pos(m_nBe­zec);
	str­Text.For­mat("%d", nSkok[pBe­zec->Get­Pos()]);
	SetDl­gI­tem­Text(IDC_STA­TIC_BE­ZEC, str­Text);
	
	re­turn CDia­log::OnI­nit­Dia­log();
}

Aby sme v po­pi­se ved­ľa bež­ca vi­de­li je­ho pres­nú po­zí­ciu, mu­sí­me na­ma­po­vať ob­slu­hu sprá­vy WM_HSCROLL a zme­niť jej ob­služ­nú fun­kciu tak­to:

void CSpolDlg::OnHScroll(UINT nSBCo­de, UINT nPos, CScrollBar* pScrollBar) 
{
	// aby sa ak­tua­li­zo­val 
	// po­pis po­zí­cie
	// inak sa OnHScroll ne­mu­sí vo­lať
	CString str­Text;
	CSli­derCtrl* pBe­zec=(CSli­derCtrl*) GetDl­gI­tem(IDC_BE­ZEC);
	
	str­Text.For­mat("%d", nSkok[pBe­zec->Get­Pos()]);
	SetDl­gI­tem­Text(IDC_STA­TIC_BE­ZEC, str­Text);
}

Zoz­nam ob­ráz­kov: Zoz­nam ob­ráz­kov sám ose­be veľ­kú fun­kciu nepl­ní, je­ho „si­la“ a „uži­toč­nosť“ sa pre­ja­ví až v spo­je­ní s preh­lia­da­čom zoz­na­mov a stro­mom. Do preh­lia­da­ča ob­ráz­kov vkla­dá­me iko­ny. Tie­to iko­ny „ťa­há­me“ buď zo zdro­jov (po­dľa ID), ale­bo pria­mo z dis­ku (po­zri vy­ššie di­llo.avi) (po­dľa me­na). My vy­uži­je­me pr­vý spô­sob. Vlož­te do zdro­jov tri no­vé iko­ny (v Re­sour­ces pra­vým tla­čid­lom na Icon a In­sert Icon). Ak má­te ne­ja­ké vhod­né na dis­ku, mô­že­te ich po­koj­ne im­por­to­vať. Ak ne­pat­rí­te med­zi gra­fic­ky zdat­ných ale­bo sa vám nec­hce kres­liť ne­ja­ké per­fek­tné iko­ny, vy­tvor­te tri roz­diel­ne iko­ny jed­no­duc­ho tak, že kaž­dú vy­pl­ní­te inou far­bou. Pre jed­no­duc­hosť zvoľ­te „kla­sic­ké“ vý­pl­ne Red, Green, Blue a po­dľa to­ho naz­vi­te aj ID týc­hto ikon: IDI_RED, IDI_GREEN, IDI_BLUE. Te­raz má­me tri iko­ny – čer­ve­nú, ze­le­nú a mod­rú – v tva­re štvor­ca. Keď má­me iko­ny, mu­sí­me ich eš­te ne­ja­ko „nap­rog­ra­mo­vať“. Pri­daj­te jed­nu súk­rom­nú pre­men­nú ty­pu Zoz­nam ob­ráz­kov do trie­dy di­aló­gu:

pri­va­te:
	CI­ma­ge­List m_Zoz­na­mObr;

Te­raz do­píš­te ten­to kód do fun­kcie OnI­nit­Dia­log (pod vo­la­nie fun­kcie SetDl­gI­tem­Text (ale­bo pred, ak chce­te), po­dmien­kou je, aby ste kód pri­da­li pred vo­la­nie fun­kcie CDia­log::OnI­nit­Dia­log()).

BOOL CSpolDlg::OnI­nit­Dia­log() 
{
// ...
HI­CON hI­ko­ny[3];

	m_Zoz­na­mObr.Crea­te(32, 32, ILC_CO­LOR4, 3, 3);
	
	hI­ko­ny[0]=AfxGe­tApp()->Loa­dI­con(IDI_RED); 
	hI­ko­ny[1]=AfxGe­tApp()->Loa­dI­con(IDI_GREEN); 
	hI­ko­ny[2]=AfxGe­tApp()->Loa­dI­con(IDI_BLUE);
	
	for (int i=0; i<3; i++) 
	{
		m_Zoz­na­mObr.Add(hI­ko­ny[i]);
	}
		
	re­turn CDia­log::OnI­nit­Dia­log();
}

Tým je zoz­nam ob­ráz­kov do­kon­če­ný.

Preh­lia­dač zoz­na­mov: Ako sme po­ve­da­li, zoz­nam ob­ráz­kov vy­uži­je­me až v spo­je­ní s preh­lia­da­čom zoz­na­mov, prí­pad­ne stro­mom. Pri­daj­te do di­aló­gu po­dľa obr. 3 je­den preh­lia­dač zoz­na­mov (Lis­tCon­trol). Je­ho vlas­tnos­ti nas­tav­te, ako vi­dí­te na obr. 5. ID nec­haj­te na de­fault: IDC_LIST1. Aby sme moh­li sle­do­vať, akú po­lož­ku má­me ozna­če­nú, pri­daj­te pod preh­lia­dač aj je­den po­pis. Do je­ho ID na­píš­te: IDC_STA­TIC_LIST a vy­maž­te text z je­ho Cap­tion.

C++_13_obr4.jpg
Obr. 4 Vlas­tnos­ti preh­lia­da­ča zoz­na­mov

Pre pre­po­je­nie preh­lia­da­ča zoz­na­mov so zoz­na­mom ob­ráz­kov pri­daj­te eš­te ten­to kód do fun­kcie OnI­nit­Dia­log:

	CListCtrl* pList=(CListCtrl*) GetDl­gI­tem(IDC_LIST1);

	pList->Se­tI­ma­ge­List(&m_Zoz­na­mObr, LVSIL_SMALL);
	
	pList->In­sertIt­em(0, "čer­ve­ná", 0);
	pList->In­sertIt­em(1, "ze­le­ná", 1);
	pList->In­sertIt­em(2, "mod­rá", 2);

Pre ob­me­nu textu v po­pi­se po­dľa vy­bra­nej po­lož­ky zo zoz­na­mu je po­treb­né po­mo­cou Class Wizar­du na­ma­po­vať sprá­vu preh­lia­da­ča zoz­na­mov: LVN_ITEM­CHAN­GED. Jej kód up­rav­te tak­to:

void CSpolDlg::OnI­tem­chan­ged­List1(NMHDR* pNMHDR, LRE­SULT* pRe­sult) 
{
	CString str­Po­loz­ka;
	int nVy­ber;

	NM_LIS­TVIEW* pNMLis­tView = (NM_LIS­TVIEW*)pNMHDR;

	CListCtrl* pList = (CListCtrl*) GetDl­gI­tem(IDC_LIST1);
	// iItem je člen­ská pre­men­ná
	// štruk­tú­ry NM_LIS­TVIEW
	nVy­ber = pNMLis­tView->iItem;
		
	str­Po­loz­ka = pList->Ge­tI­tem­Text(nVy­ber, 0);
	SetDl­gI­tem­Text(IDC_STA­TIC_LIST, str­Po­loz­ka);

	*pRe­sult = 0;
}

Strom: Juj, ako som pí­sal v úvo­de, mu­sím sa kro­tiť.

CTreeCtrl* pTree = (CTreeCtrl*) GetDl­gI­tem(IDC_TREE1);
TV_IN­SERTSTRUCT tvin­sert;
tvin­sert.hPa­rent = NULL;
tvin­sert.hIn­sertAft­er = TVI_LAST;
tvin­sert.item.mask = TVIF_TEXT;
tvin­sert.item.hI­tem = NULL;
tvin­sert.item.sta­te = 0;
tvin­sert.item.sta­te­Mask = 0;
	
tvin­sert.item.cChildren = 0;
tvin­sert.item.lPa­ram = 0;
	
tvin­sert.item.pszText = "Otec";
HTREEITEM hO­tec = pTree ->In­sertIt­em(&tvin­sert);
tvin­sert.item.pszText = "Ma­ma";
HTREEITEM hMa­ma = pTree->In­sertIt­em(&tvin­sert);

tvin­sert.hPa­rent = hO­tec;
tvin­sert.item.pszText = "Dcé­ra_1";
pTree->In­sertIt­em(&tvin­sert);
tvin­sert.item.pszText = "Syn­_1";
pTree->In­sertIt­em(&tvin­sert);

tvin­sert.hPa­rent = hMa­ma;
tvin­sert.item.pszText = "Dcé­ra_2";
pTree->In­sertIt­em(&tvin­sert);

---CUT---

void CSpolDlg::On­Sel­chan­ged­Tree1(NMHDR* pNMHDR, LRE­SULT* pRe­sult) 
{
	NM_TREE­VIEW* pNMTree­View = (NM_TREE­VIEW*)pNMHDR;
	CTreeCtrl* pTree = (CTreeCtrl*) GetDl­gI­tem(IDC_TREE1);
	HTREEITEM hSe­lec­ted = pNMTree­View->item­New.hI­tem;
	if (hSe­lec­ted != NULL) 
{
		char text[15];
		TV_ITEM item;
		item.mask = TVIF_HAND­LE | TVIF_TEXT;
		item.hI­tem = hSe­lec­ted;
		item.pszText = text;
		item.cchTextMax = 30;
		VE­RI­FY(pTree->Ge­tI­tem(&item));
		SetDl­gI­tem­Text(IDC_STA­TIC_TREE, text);
	}
	*pRe­sult = 0;
}

DOMÁCA ÚLO­HA
Do­ma si skús­te nap­rog­ra­mo­vať aj iné spo­loč­né ov­lá­da­cie pr­vky (čí­sel­ník, ka­len­dár) a vy­skú­šaj­te si ich rôz­ne nas­ta­ve­nia a vlas­tnos­ti. Skús­te si sa­mi (bez in­for­má­cií z na­šej webo­vej strán­ky) nap­rog­ra­mo­vať strom len s po­mo­cou hel­pu. Aj keď bu­de­te mož­no neús­peš­ní, ve­ľa sa nau­čí­te! Vy­tvor­te si lep­ší zoz­nam ob­ráz­kov, kto­rý po­uži­te na­mies­to tu vy­tvo­re­né­ho v preh­lia­da­či zoz­na­mov a pri­poj­te ho aj k stro­mu.

NA­BUDÚCE
O me­siac ne­mo­dál­ny­mi di­alóg­mi de­fi­ni­tív­ne skon­čí­me tú­to té­mu (veď už bo­lo na­ča­se) a po­vie­me si nie­čo o tvor­be me­nu.

Ďal­šie čas­ti >>

Zdroj: PC Revue 8/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